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