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

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

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

Условие задачи 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;
}

Оптимизация

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


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

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