Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.12.2016, 17:14   #1
Анастасия0
 
Регистрация: 19.12.2016
Сообщений: 8
Печаль Pascal. Дано натуральное число. Верно ли, что произведение нечетных цифр данного числа меньше некоторого заданного числа

Дано натуральное число. Верно ли, что произведение нечетных цифр данного числа меньше некоторого заданного числа.
Анастасия0 вне форума Ответить с цитированием
Старый 19.12.2016, 17:45   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
readLn(n);
readLn(k);
p:=1;
while n>0 do begin
  if odd(n mod 10) then p:=p*(n mod 10);
  n := n div 10
end;
if p<k then WriteLn('Верно') else WriteLn('Не верно!');
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2016, 17:54   #3
Анастасия0
 
Регистрация: 19.12.2016
Сообщений: 8
По умолчанию

начало как я понимаю так будет выглядеть:
var n,k:integer;
p:real;
begin
writeln('Введите число:');
readln(n);
?
И еще вопрос как нужно описать k?
Анастасия0 вне форума Ответить с цитированием
Старый 19.12.2016, 19:21   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
начало как я понимаю так будет выглядеть:
да, вполне.

Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
И еще вопрос как нужно описать k?
А разве Вы не описали k ?
Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
var n,k:integer;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2016, 19:31   #5
Анастасия0
 
Регистрация: 19.12.2016
Сообщений: 8
По умолчанию

Программа не решает или я не понимаю что требуют... А после then не должно быть else?
Код:
var n,k:integer;
    p:real;
begin
     writeln('Введите число');
     readln(n);
     readln(k);
     p:=1;
     while n>0 do begin
                  if odd(n mod 10) then p:=p*(n mod 10);
                  n := n div 10
                  end;
     if p<k then WriteLn('Верно') else WriteLn('Не верно!');
end.


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE]
(это кнопочка на панели форматирования с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 19.12.2016 в 19:42.
Анастасия0 вне форума Ответить с цитированием
Старый 19.12.2016, 19:43   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
Программа не решает или я не понимаю что требуют
Простите, но это не вопрос, а утверждение.
Вполне допускаю, что не понимаете.
Спрашивайте, что не понятно?


Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
А после then не должно быть else?
а разве там нет else после then ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 19.12.2016, 19:48   #7
Анастасия0
 
Регистрация: 19.12.2016
Сообщений: 8
По умолчанию

Ну как я вижу else отсутствует :
Код:
begin
       if odd(n mod 10) then p:=p*(n mod 10);
       n := n div 10
end;
и я не понимаю, что обозначает k и как считает этот алгоритм, что он по идее находит? Условие задачи разве здесь выполняется?

Последний раз редактировалось Анастасия0; 19.12.2016 в 20:12.
Анастасия0 вне форума Ответить с цитированием
Старый 20.12.2016, 00:20   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
if odd(n mod 10) then p:=p*(n mod 10);
в данном случае ничего делать по ИНАЧЕ (else) не нужно, поэтому else и нет.
потому что в данном случае "иначе" - если цифра в числе чётная. по условию задачи, если цифра чётная,
то нам с ней ничего делать не надо.

Цитата:
Код:
if odd(n mod 10) then p:=p*(n mod 10);
а эта строчка означает буквально следующее
если последняя цифра числа является нечётной, тогда произведение, полученное ранее домножим на эту последнюю цифру.

Цитата:
Код:
n := n div 10
отбросим последнюю цифру числа путём целочисленного деления на 10


Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
что он по идее находит?
в переменной p данный алгоритм находит произведение нечетных цифр данного числа (см. задание).

потом сравниваем p с заданным числом k
и определяем, Верно ли, что произведение нечетных цифр данного числа меньше некоторого заданного числа
если p меньше k, тогда Верно.

Последний раз редактировалось Serge_Bliznykov; 20.12.2016 в 00:23.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.12.2016, 19:39   #9
Анастасия0
 
Регистрация: 19.12.2016
Сообщений: 8
По умолчанию

Спасибо большое что помогли без вас бы не сдала! А если нужно будет сделать с процедурой (с параметрами) как будет выглядеть? Если вы конечно можете помочь.
Анастасия0 вне форума Ответить с цитированием
Старый 23.12.2016, 11:32   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Анастасия0 Посмотреть сообщение
А если нужно будет сделать с процедурой (с параметрами) как будет выглядеть?
примерно так:


Код:
procedure multiply_odd_digit(n : integer; var res : real);
begin
     res:=1;
     while n>0 do 
     begin
         if odd(n mod 10) then res:=res*(n mod 10);
         n := n div 10
     end;
end;

var n,k:integer;
    p:real;
begin
     writeln('Введите числа n и k');
     readln(n);
     readln(k);
     multiply_odd_digit(n, p);
     if p<k then WriteLn('Верно') else WriteLn('Не верно!');
end.
или так:
Код:
procedure check_multiply_odd_digit_less_then_K(n,k : integer; var isLess : boolean);
var p: real;
begin
     p:=1;
     while n>0 do 
     begin
         if odd(n mod 10) then p:=p*(n mod 10);
         n := n div 10
     end;
     isLess := p<k;
 
end;

var n,k:integer;
    flag:boolean;
begin
     writeln('Введите числа n и k');
     readln(n);
     readln(k);
     check_multiply_odd_digit_less_then_K(n,k, flag);
     if flag  then WriteLn('Верно') else WriteLn('Не верно!');
end.

или так:
Код:
procedure print_multiply_odd_digit_less_then_K(n,k : integer);
var p: real;
begin
     p:=1;
     while n>0 do 
     begin
         if odd(n mod 10) then p:=p*(n mod 10);
         n := n div 10
     end;
     if p<k  then WriteLn('Верно') else WriteLn('Не верно!');
 end;

var n,k:integer;
begin
     writeln('Введите числа n и k');
     readln(n);
     readln(k);
     print_multiply_odd_digit_less_then_K(n,k);
end.
выбирайте, какой вариант больше нравится!
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано натуральное число.Верно ли, что оно является простым? Роял Паскаль, Turbo Pascal, PascalABC.NET 1 29.01.2015 21:47
Помогите составить программу (Lazarus): Дано натуральное число п. Поменять порядок цифр числа на обратный. Ляйсан9517 Lazarus, Free Pascal, CodeTyphon 8 15.04.2014 13:46
Задано натуральное число N. Написать рекурсивную функцию для вычисления количества цифр заданного числа. kirito_17 Помощь студентам 2 20.11.2013 15:55
Дано натуральное число N ,правдали,что сумма цифр етого числа-непарная?если несложно-выложите код програ Dima170792 Помощь студентам 3 04.05.2011 22:35
Дано натуральное число n. Определить, сколько парных цифр в числе n. Чему равна сумма нечетных его цифр? pahanzona Microsoft Office Excel 4 27.02.2011 15:46