Консультация № 180315
14.10.2010, 17:43
0.00 руб.
0 17 2
Уважаемы эксперты!!
Помогите решить задачку по делфи)
Найти разницу между произведением четных и нечетных цифр 4-значного числа.

P.S преподовательница сказала решить без условий..решить как линейный алгоритм)

Обсуждение

Неизвестный
14.10.2010, 18:08
общий
это ответ
Здравствуйте, Сергачев Рома!
Дано число x (четырехзначное). Тогда:
первая цифра = x div 1000
вторая цифра = (x div 100) mod 10
третья цифра = (x mod 100) div 10
четвертая цифра = x mod 10
ИТОГО: разницу между произведением четных и нечетных цифр 4-значного числа можно найти следующим образом:
((x div 100) mod 10)*(x mod 10) - (x div 1000)*((x mod 100) div 10)

Удачи!
Неизвестный
14.10.2010, 18:15
общий
6a3uJI:
можете сразу программка скинуть?)
Неизвестный
14.10.2010, 20:36
общий
6a3uJI:
я понел эту задачку след.образом...т.е он считае разность произведение четных и нечетных...например 4225,разность равна 16-5=11
а у вас,считает разность проиизв.чисел стоящих на четных и нечет.местах
Неизвестный
14.10.2010, 21:37
общий
Сергачев Рома:
Интересно, может я туповат, но если использовать вашу интерпретацию, то как можно обойтись без условий? Надо же как-то проверять четная ли это цифра или нет - а это уже условие. Может быть верна интерпретация 6a3uJI?
давно
Мастер-Эксперт
425
4118
15.10.2010, 05:21
общий
Сергачев Рома:
Цитата: 339715
например 4225,разность равна 16-5=11

Как Вы определили, какие цифры в числе чётные, а какие нечётные?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
15.10.2010, 08:00
общий
это ответ
Здравствуйте, Сергачев Рома!
Предлагаю вам следующий вариант решения.
На форме : Edit1 - ввод числа, Edit2 - результат, Button1 - запуск расчета
Код и описание в приложении.
Вопросы - пишите.
Удачи.

Приложение:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
i, temp, p_1, p_2: integer;

begin
Edit2.Text:= '';
temp:= 0;
try
temp:= StrToInt(Edit1.Text); // Проверяем ввод целого числа
except
ShowMessage('Введите целое число');
exit;
end;

p_1:= 1; // Начальные значения произведений
p_2:= 1;
for i:= 1 to Length(Edit1.Text) do
begin
if Odd(StrToInt(Edit1.Text[i])) then p_2:= p_2 * StrToInt(Edit1.Text[i]) // Если число нечетное
else p_1:= p_1 * StrToInt(Edit1.Text[i]); // Если число четное
end;

if p_1 = 1 then p_1:= 0; // Если нет четных чисел
if p_2 = 1 then p_2:= 0; // Если нет нечетных

Edit2.Text:= IntToStr(p_1 - p_2); // Результат

end;

end.
Неизвестный
15.10.2010, 09:22
общий
Сергачев Рома:
Исходя из Вашего вопроса
Найти разницу между произведением четных и нечетных цифр 4-значного числа.
алгоритм следующий:
число X, состоящее их четырех цифр A, B, C, D. Сперва нужно получить каждую из цифр по отдельности, а после, найти разность между произведением четных (второй и четвертой цифрой, т.е. B и D) и нечетных (первой и третьей цифрой, т.е. A и C) цифр. Получить эти цифры можно с помощью операторов div (целочисленное деление) и mod (остаток от деления), как я и написал в ответе.

Успехов!

P.S. Что касается исходника, то тут ничего сложного нет. Добавьте на форму два компонента TEdit (Edit1 - исходное четырехзначное число, Edit2 - результат) и кнопку TButton (Button1). Дважды щелкните по кнопке - будет сформирован процедура - событие Button1Click. Вставьте следующий код:


procedure TForm1.Button1Click(Sender: TObject);
var
x: integer;
begin
x:=StrToInt(Edit1.Text);
Edit2.Text:=IntToStr(((x div 100) mod 10)*(x mod 10) - (x div 1000)*((x mod 100) div 10));
end;


Естественно, можно сделать проверку ввода, и другие дополнения.
Успехов!
давно
Мастер-Эксперт
425
4118
16.10.2010, 13:54
общий
Шичко Игорь:
Цитата: Текст вопроса
...преподовательница сказала решить без условий...

А у Вас в коде это что такое:
if Odd(StrToInt(Edit1.Text[i])) then

?
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
16.10.2010, 16:23
общий
sir Henry:
Согласен. Однако, вполне возможно такой вариант устроит пользователя.
Все-таки необходимо определиться какой из вариантов интерпретации задания правильный.
Сейчас отправлю запрос автору.
Неизвестный
16.10.2010, 16:26
общий
Сергачев Рома:
Так все-таки какой вариант подсчета четных/нечетных цифр необходим.
И правильно ли полностью исключать из программы операторы IF ?
давно
Академик
320937
2216
20.10.2010, 15:06
общий
Добрый день, коллеги! Жаль, закрыли :)
ABC-Pascal
Код:
program p180315;
// Найти разницу между произведением четных и нечетных цифр 4-значного числа.
// IF не использовать
var
c1, c2, c3, c4: 0..9;
p1, p2, p3, p4: 0..9;
p_odd, p_even : integer;
po, pe, n_odd, n_even : 0..4;
r: integer;
x:integer;
begin
write('x=');
readln(x);

// Определяем отдельные цифры числа
r:= x;
c4 := r mod 10;
r:= r div 10;

c3 := r mod 10;
r:= r div 10;

c2 := r mod 10;
c1 := r div 10;

p1 := c1 mod 2;
p2 := c2 mod 2;
p3 := c3 mod 2;
p4 := c4 mod 2;

po := p1+p2+p3+p4;
n_odd:=(po and 1) or ((po shr 1) and 1) or ((po shr 2) and 1);

pe := 4-po;
n_even:=(pe and 1) or ((pe shr 1) and 1) or ((pe shr 2) and 1);

p_odd := (c1*p1 or 1)*(c2*p2 or 1)*(c3*p3 or 1)*(c4*p4 or 1);
p_even := c1*c2*c3*c4 div p_odd;

Writeln('Разность произведений четных и нечетных цифр числа ', x, ' равна ',
p_even*n_even-p_odd*n_odd);
end.


Примеры диалога
Код:
x=1234
Разность произведений четных и нечетных цифр числа 1234 равна 5
x=3333
Разность произведений четных и нечетных цифр числа 3333 равна -81
x=2525
Разность произведений четных и нечетных цифр числа 2525 равна -21
x=2222
Разность произведений четных и нечетных цифр числа 2222 равна 16
x=1111
Разность произведений четных и нечетных цифр числа 1111 равна -1


Неизвестный
20.10.2010, 15:58
общий
lamed:
Хорошая мысль.
давно
Академик
320937
2216
20.10.2010, 16:00
общий
Alex1:
Добрый день! Примеры работы по Вашей программе
Код:
1111
0
2222
15

В первом случае должно быть -1, во втором 16.
Неизвестный
20.10.2010, 17:48
общий
Цитата: lamed
В первом случае должно быть -1, во втором 16.

Хмм.. действительно. Когда все цифры чётные или все нечётные, то программа работает некорректно. Не учёл.
давно
Мастер-Эксперт
425
4118
21.10.2010, 09:27
общий
Alex1:
Сможете исправить свою программу? Если да, то выложите исправленный код сюда.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Неизвестный
21.10.2010, 17:52
общий
sir Henry:
Нет, мою программу исправить уже нельзя. Нужен совсем другой алгоритм, на который у меня сейчас совершенно нет настроения и времени. Можете удалить мой ответ.
давно
Мастер-Эксперт
425
4118
22.10.2010, 10:22
общий
Alex1:
Тогда извините, придётся Ваш ответ удалить.
Об авторе:
Я только в одном глубоко убеждён - не надо иметь убеждений! :)
Форма ответа