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

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

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

 
 Ответить  Открыть новую тему 
> задачка с числами)помогите хоть чем-то
сообщение
Сообщение #1





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

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


на интервале чисел для нечетных чисел найти средние арифметические четных и нечетных цифр, для четных определить числа с максимальной цифрой в четном разряде
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


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


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

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

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


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

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

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

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


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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

 



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