Пример выполнения работы. Решить задачу, используя функцию

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

Решить задачу, используя функцию.

Даны два натуральных числа a и b – числитель и знаменатель дроби. Сократите дробь, разделив числа на их наибольший общий делитель (НОД). Функция должна находить НОД 2- х чисел по алгоритму Евклида.

Алгоритм Евклида:

1. Вычислим r - остаток от деления числа a на b (a>b), a = bq+r, 0 <= r < b.

2. Если r = 0, то b есть искомое число (НОД).

3. Если r != 0, то заменим пару чисел (a, b) парой (b, r), и перейдем к шагу 1.

Для решения задачи в среде Microsoft Visual Studio 2013 было создано стандартное консольное приложение (проект типа Win32 Console Application) с установленным свойством «пустой проект» (Empty project). В проект добавлен файл с расширением .cpp, исходный код которого приведен ниже.

Листинг программы с комментариями:

#include <stdio.h>

#include <locale.h>

#include <stdlib.h>

unsigned Evklid(int a, int b)

{

// Находим НОД для а и b

int a1, b1;

if (a>b)

{

a1 = a; b1 = b;

}

else

{

a1 = b; b1 = a;

}

int o;

do

{

o = a1 % b1;

if (o == 0) return b1;

a1 = b1;

b1 = o;

} while (1);

}

 

int main(int argc, char *argv[])

{

int a, b, // Исходные данные - числитель и знаменатель

nod;

setlocale(LC_ALL, "rus"); // Возможность вывода русских символов в кодировке

// Windows-1251 на консоль

if (argc < 3) // Ошибка

{

printf_s("Ошибка, параметров в командной строке не хватает для задания исходных данных. Для завершения нажмите любую клавишу\n");

system("pause");

return 1;

}

// Читаем значения из командной строки

if (sscanf_s(argv[1], "%d", &a) < 1) // Читаем a

{

printf_s("Ошибка, неверный формат первого входного параметра. Для завершения нажмите любую клавишу\n");

system("pause");

return 1;

}

if (sscanf_s(argv[2], "%d", &b) < 1) // Читаем a

{

printf_s("Ошибка, неверный формат первого входного параметра. Для завершения нажмите любую клавишу\n");

system("pause");

return 1;

}

nod = Evklid(a, b); // Получаем наибольший общий делитель

 

printf("a=%d, b=%d, nod=%d. Сокращенная дробь: %d/%d. Для завершения нажмите любую клавишу\n", a, b, nod, a/nod, b/nod);

system("pause"); // Остановка программы до нажатия любой клавиши

return 0;

}

 

После компиляции и сборки программы ее необходимо запустить в командной строке. Если имя исполняемого файла MyProg.exe, то его необходимо в командной строке ввести команду MyProg 66 100

После имени исполняемого файла обязательно идут через пробелы 2 параметра, являющиеся целыми значениями – числителем и знаменателем дроби.

Результаты работы программы представлены на рисунке 6.

Рисунок 6 – Результаты работы программы