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

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

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

 
 Ответить  Открыть новую тему 
> Найти количество нечетных чисел
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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


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


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

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

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


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

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


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


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


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

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

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


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

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

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


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


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

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

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


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

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

blum.gif

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


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

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

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


inc(x) 

или
x:=x+1 

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

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

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


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


Новичок
*

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

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


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

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

А поподробней? Плизз.. Я туплю.. Что я спутала?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


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

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

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


Цитата

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

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


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


Гость






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

Цитата
И в любом случае строчка (mod 2) невыносимо режет глаз...
Не забыл добавить слово МНЕ? Ибо для меня, например, это совершенно нормальная форма записи...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #13


Новичок
*

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

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


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


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

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

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


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

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

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


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


Гость






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

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


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

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

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


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

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

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


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


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

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

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


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

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


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

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

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


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


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

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

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


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

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

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

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


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


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

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

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


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

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

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

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


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

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

 





- Текстовая версия 8.11.2024 19:07
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name