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

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

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

> задачка с числами)помогите хоть чем-то
Vikusik93
сообщение 15.02.2012 18:06
Сообщение #1





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

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


на интервале чисел для нечетных чисел найти средние арифметические четных и нечетных цифр, для четных определить числа с максимальной цифрой в четном разряде
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 4)
Lapp
сообщение 16.02.2012 2:34
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Vikusik93 @ 15.02.2012 19:06) *
на интервале чисел для нечетных чисел найти средние арифметические четных и нечетных цифр, для четных определить числа с максимальной цифрой в четном разряде

Викусик, спасибо за задачку ). Лови решение.

var
i: integer;
a,b,d,j,m,k: longint;
s,n: array[0..1] of longint;

const
EvenOdd: array[0..1] of string= ('even','odd');

begin
writeln('please enter limits of the interval');
write(' lower: ');
readln(a);
write(' upper: ');
readln(b);
m:= 0;
s[0]:= 0;
s[1]:= 0;
n[0]:= 0;
n[1]:= 0;
for i:=a to b do begin
j:= i;
if Odd(i) then
while j>0 do begin
d:= j mod 10;
k:= d mod 2;
inc(s[k],d);
inc(n[k]);
j:= j div 10
end
else
while j>0 do begin
d:= j mod 10;
if d>m then m:= d;
j:= j div 100
end
end;

writeln('for odd numbers:');
for i:=0 to 1 do
if n[i]=0 then
writeln(' no ',EvenOdd[i],' digits encountered')
else
writeln(' average of ',EvenOdd[i],' digits is ',s[i]/n[i]:8:6);
writeln('for even nubers:');
writeln(' max digit in even position is ',m);
writeln(' numbers which have ',m,' in an even position:');
for i:=a to b do begin
j:= i;
if not Odd(i) then
while j>0 do begin
if j mod 10=m then begin
write(i:8);
break
end;
j:= j div 100
end
end;
readln
end.

У меня только возник по пути вопрос: c какого разряда начинать - с нулевого или с первого? Я считал, что самый правый разряд имеет номер 0 (то есть четный). Если надо иначе, а также если что-то неясно - говори smile.gif.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Vikusik93
сообщение 22.02.2012 11:00
Сообщение #3





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

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


Можно блок-схему)чтобы понять)
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 22.02.2012 11:30
Сообщение #4


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(Vikusik93 @ 22.02.2012 12:00) *

Можно блок-схему)чтобы понять)

Okay. Набросаю чуть позже (вечерком).
Только я не умею их рисовать. То есть обозначений не знаю..
И с уровнем подробности неясно.. Но я все же попробую.

Слушай, Вик, а ты не можешь просто сказать, в каком месте у тебя происходит затык? Я бы тогда на словах тоже объяснил. Как думаешь?


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 23.02.2012 6:48
Сообщение #5


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Викуська, заломало меня рисовать квадратики, прости уж.. Более того - я сильно сомневаюсь, что блок-схема тут поможет пониманию (ей-ей!). Думаю, даже твой преп это понимает, так что если это он просил бл-сх (в чем я почти не сомневаюсь)), то все же попробуй втюхать ему, что это для его же блага ты ее не стала рисовать smile.gif. Если ты и правда хочешь разобраться и понять (что бывает с вашим братом нечасто)), то давай я тебе лучше комменты напишу, а? smile.gif

var
i: integer;
a,b,d,j,m,k: longint;
s,n: array[0..1] of longint; // s - суммы [четных, нечетных], n - количества [четных, нечетных] (при определении средних поделим одюно на другое)

const
EvenOdd: array[0..1] of string= ('even','odd'); // это просто названия видов чисел, нужны для лучшей организации вывода результатов (переводится как ЧетныйНечетный)

begin
writeln('please enter limits of the interval');
write(' lower: ');
readln(a); // ввод нижней границы интервала чисел
write(' upper: ');
readln(b); // ввод верхней границы интервала чисел
m:= 0; // это будет максимальная цифра (где надо)), пока обнуляем
s[0]:= 0; // тут и ниже обнуляем суммы и количества
s[1]:= 0;
n[0]:= 0;
n[1]:= 0;
for i:=a to b do begin // цикл по всем числам интервала (главный цикл поиска и расчетов)
j:= i; // мы будем менять текущее значение цикла, а это нельзя, так что перекладываем в другую переменную
if Odd(i) then // обработка нечетных чисел по заданным условиям
while j>0 do begin // цикл определения цифр справа налево, пока число не обнулится
d:= j mod 10; // определение текущей цифры
k:= d mod 2; // тут k - это четность, то есть: k=0 при четном d и k=1 при нечетном d
inc(s[k],d); // увиличиваем нужную (четных или нечетных) сумму на найденную цифру
inc(n[k]); // увеличиваем нужное количество (четных или нечетных) цифр на 1
j:= j div 10 // продвигаемся по чилсу на один разряд влево..
end
else
while j>0 do begin // обработка четных чисел
d:= j mod 10; // определение текущей цифры
if d>m then m:= d; // если текущая цифра больше найденного макимума - обновляем максимум
j:= j div 100 // продвигаемся по числу влево, но теперь на ДВА разряда, т.к. нам нужны только четные разряды (0, 2, 4, 6, 8, 10, 12..)
end
end;
// все рассчитано, надо только вывести результаты теперь ...
writeln('for odd numbers:'); // ... для нечетных чисел
for i:=0 to 1 do // очень хитро*опый цикл вывода, для него нужен был массив EvenOdd
if n[i]=0 then // это тоже хитрость, которая позволяет избежать деления на ноль, если цифр какого-то вида не найдено совсем ))
writeln(' no ',EvenOdd[i],' digits encountered') // выводим, что не нашли цифр такого вида
else // а если найдено, то можно спокойно находить их среднее
writeln(' average of ',EvenOdd[i],' digits is ',s[i]/n[i]:8:6); // ку-ку, вот вам среднее! делим сумму на количество прямо при выводе
writeln('for even nubers:'); // ... а теперь для четных чисел
writeln(' max digit in even position is ',m); // максимальная цифра в четной позиции такая-то..
writeln(' numbers which have ',m,' in an even position:'); // .. и было их вот столько с этой цифрой в четном разряде
// это все было просто.. а вот для вывода этих чисел придется снова проходить по интервалу..
for i:=a to b do begin // проходим заново
j:= i; // см. выше (чтобы издевательство над параметром цикла не помешали гладкому его течению, перекладываем значение)
if not Odd(i) then // если число четное
while j>0 do begin // цикл для определния циферок
if j mod 10=m then begin // а тут отклонение от того, что выше: если цифра равна найденному ранее максимуму...
write(i:8); // .. то выводим ее
break // идти дальше по разрядам нет смысла, да и вредно - можем случайно вывести число дважды или там трижды или больше раз, а нам это не надо вроде как
end;
j:= j div 100 // прдвигаемся по разрядам на два (по четным)
end
end;
readln // хорошо поработали, можно отдохнуть.. ))
end.

Вика, разбирайся )). Что неясно - спрашивай, не стесняйся.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



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