Согласие на обработку персональных данных.



04.11.2017
Новые видео и статья Функция Odd.

29.10.2017
Новые видео и статья Функция Low.

23.10.2017
Новая задача Даны натуральные числа от 1 до 33.

22.10.2017
Добавлен раздел Статьи по С/С++.

03.10.2017
Новая книга 1001 вопрос начинающего программиста.

Раздел: Задачи / Простейшие /

Разность по модулю и произведение двух чисел

Основы C++ Основы C++

C++ - это один из самых популярных языков программирования. Не важно, на каком языке программируете лично вы. Но, если вы хотя бы в общих чертах не знаете С++, то это большой пробел в вашем образовании, который надо восполнить как можно быстрее... Подробнее...

Условие задачи 1.2

Задача 1.2
Даны два целых числа Х и Т. Если они имеют разные знаки, то присвоить Х значение произведения этих чисел, а Т - значение их разности по модулю. Если числа имеют одинаковые знаки, то присвоить Х значение разности по модулю исходных чисел, а Т - значение произведения этих чисел. Новые значения Х и Т вывести на экран.

Задача тоже несложная. “Непонятки” могут возникнуть только в том случае, если вы забыли, что такое разность по модулю (надеюсь, что такое произведение двух целых чисел, вы всё-таки помните))).

Разность по модулю двух чисел

Разность по модулю двух целых чисел (хотя не обязательно целых - это не имеет значения, просто в нашей задаче числа целые) - это, говоря по простому, когда итогом вычисления является модуль разности двух чисел.

То есть сначала выполняется операция вычитания одного числа из другого. А затем вычисляется модуль результата этой операции.

Математически это можно записать так:

А = |(X - Т)|

Если кто забыл, что такое модуль или как его вычислить в Паскале, то см. здесь.

Алгоритм определения знаков двух чисел

Решение задачи в целом довольно простое. Трудность у новичков может вызвать лишь определение знаков двух чисел. То есть надо ответить на вопрос: как узнать, имеют числа одинаковые знаки или разные.

Сначала напрашивается поочерёдное сравнение чисел с нулём. Это допустимо. Но исходный код будет довольно большим. Поэтому более правильно использовать такой алгоритм:

  1. Умножить числа друг на друга
  2. Если результат меньше нуля, значит у чисел разные знаки
  3. Если результат равен нулю или больше нуля, то у чисел одинаковые знаки

Этот алгоритм я выполнил в виде отдельной функции. А сама программа получилась такой, как показано в примерах на Паскале и С++ ниже.

Решение задачи 1.2 на Паскале
program checknums;

var A, X, T  : integer;

//****************************************************************
// Проверяет, имеют ли числа N1 и N2 одинаковые знаки. Если да, то
// возвращает TRUE, иначе - FALSE
//****************************************************************
function ZnakNumbers(N1, N2 : integer) : boolean;
begin
  Result := (N1 * N2) >= 0;
end;

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin
  Write('X = ');
  ReadLn(X);
  Write('T = ');
  ReadLn(T);

  if ZnakNumbers(X, T) then  //Если числа имеют одинаковые знаки
    begin
      A := Abs(X - T);       //Получить разность по модулю исходных чисел
      T := X * T;
    end
  else                       //Если числа имеют разные знаки
    begin
      A := X * T;
      T := Abs(X - T);
    end;
  X := A;                    //Записать в Х значение А
  WriteLn('X = ', X);        //Вывести Х
  WriteLn('T = ', T);        //Вывести Т

  WriteLn('The end. Press ENTER...');
  ReadLn;
end.

Решение задачи 1.2 на С++
#include 
#include 

using namespace std;

int A, X, T;

//****************************************************************
// Проверяет, имеют ли числа N1 и N2 одинаковые знаки. Если да, то
// возвращает TRUE, иначе - FALSE
//**************************************************************** 
bool ZnakNumbers(int N1, int N2)
{
  return ((N1 * N2) >= 0);
} 

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************      
int main(int argc, char *argv[])
{
  cout << "X = ";
  cin >> X; 
  cout << "T = ";
  cin >> T;
  
  if (ZnakNumbers(X, T))  //Если числа имеют одинаковые знаки
    {
      A = abs(X - T);     //Получить разность по модулю исходных чисел
      T = X * T;
    }
  else                    //Если числа имеют разные знаки
    {
      A = X * T;
      T = abs(X - T);
    }
  X = A;                        //Записать в Х значение А
  cout << "X = " << X << endl;  //Вывести Х
  cout << "T = " << T << endl;  //Вывести Т         
  
  system("PAUSE");
  return EXIT_SUCCESS;
}

Оптимизация

Эту простую программу можно ещё немного упростить, если не использовать функцию и немного переделать исходный код программы. При этом общее количество строк исходного кода немного сократится. Как это сделать - подумайте сами.


Основы программирования Основы программирования

Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...
Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика