![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
Vikusik93 |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 3 Пол: Женский Репутация: ![]() ![]() ![]() |
на интервале чисел для нечетных чисел найти средние арифметические четных и нечетных цифр, для четных определить числа с максимальной цифрой в четном разряде
|
Lapp |
![]()
Сообщение
#2
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
на интервале чисел для нечетных чисел найти средние арифметические четных и нечетных цифр, для четных определить числа с максимальной цифрой в четном разряде Викусик, спасибо за задачку ). Лови решение. 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 (то есть четный). Если надо иначе, а также если что-то неясно - говори ![]() -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Vikusik93 |
![]()
Сообщение
#3
|
Группа: Пользователи Сообщений: 3 Пол: Женский Репутация: ![]() ![]() ![]() |
Можно блок-схему)чтобы понять)
|
Lapp |
![]()
Сообщение
#4
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Можно блок-схему)чтобы понять) Okay. Набросаю чуть позже (вечерком). Только я не умею их рисовать. То есть обозначений не знаю.. И с уровнем подробности неясно.. Но я все же попробую. Слушай, Вик, а ты не можешь просто сказать, в каком месте у тебя происходит затык? Я бы тогда на словах тоже объяснил. Как думаешь? -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
Lapp |
![]()
Сообщение
#5
|
![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация: ![]() ![]() ![]() |
Викуська, заломало меня рисовать квадратики, прости уж.. Более того - я сильно сомневаюсь, что блок-схема тут поможет пониманию (ей-ей!). Думаю, даже твой преп это понимает, так что если это он просил бл-сх (в чем я почти не сомневаюсь)), то все же попробуй втюхать ему, что это для его же блага ты ее не стала рисовать
![]() ![]() 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.
Вика, разбирайся )). Что неясно - спрашивай, не стесняйся. -------------------- я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой |
![]() ![]() |
![]() |
Текстовая версия | 29.07.2025 9:22 |