From aa94b1f738fc991b7e150d30c4eee92da75de36d Mon Sep 17 00:00:00 2001 From: "Ivan I. Ovchinnikov" Date: Mon, 23 Aug 2021 12:42:16 +0300 Subject: [PATCH] moved complete sources to separate files --- build/main.pdf | Bin 300982 -> 300989 bytes sections/06-cycles.tex | 88 ++--------------------------------------- sources/calculator.c | 42 ++++++++++++++++++++ sources/power.c | 16 ++++++++ sources/prime.c | 21 ++++++++++ 5 files changed, 82 insertions(+), 85 deletions(-) create mode 100644 sources/calculator.c create mode 100644 sources/power.c create mode 100644 sources/prime.c diff --git a/build/main.pdf b/build/main.pdf index d9bd3a1eb71a1d8461455f320d78afb6d371a54c..ca5803dedd9d4ef944c1ea29c1980da71ab60e22 100644 GIT binary patch delta 17129 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 - -int main(int argc, char *argv[]) { - int i; - int base; - int significative; - int result = 1; - printf("Enter base: "); - scanf("%d", &base); - printf("Enter significative: "); - scanf("%d", &significative); - for (i = 0; i < significative; i++) { - result *= base; - } - printf("%d powered by %d is %d \n", base, significative, result); -} -\end{lstlisting} +\lstinputlisting[language=C,style=CCodeStyle]{../sources/power.c} Запустим нашу программу, введем для базы значение два, для показателя десять. Убедимся, что наша программа работает корректно, $2^{10}=1024$. \begin{verbatim} $ ./program @@ -201,29 +184,7 @@ if (dividers == 3) break; \end{lstlisting} Если количество целочисленных делителей не изменилось, то мы прекратим текущую итерацию цикла при помощи ключевого слова \code{continue}. Как мы знаем, оператор \code{continue} передаст управление в логическую конструкцию цикла, заставив программу проигнорировать все дальнейшие инструкции в рамках текущей итерации. Если количество целочисленных делителей достигнет трёх, что будет означать нецелесообразность дальнейших вычислений, мы разорвем цикл при помощи ключевого слова \code{break}. И полный получившийся код приложения будет такой: -\begin{lstlisting}[language=C,style=CCodeStyle] -#include - -int main(int argc, char *argv[]) { - int number; - int dividers = 0, i = 1; - printf("Enter number: "); - scanf("%d", &number); - while (i <= number) { - if (number++ % i == 0) { - dividers++; - } else { - continue; - } - if (dividers == 3) - break; - } - printf("Number %d is%s prime", - number, - (dividers == 2) ? "" : " not" - ); -} -\end{lstlisting} +\lstinputlisting[language=C,style=CCodeStyle]{../sources/prime.c} Естественно, повторимся, этот код можно оптимизировать по множеству направлений, как минимум, сократив как количество проверок, так и границы проверок (нет смысла проверять числа больше, чем $\sqrt{number}$). Дополнительно можно не проверять чётные числа, например. \begin{verbatim} $ ./program @@ -291,50 +252,7 @@ default: Оператор \code{switch()\{\}} последовательно проверит входящую переменную на соответствие описанным в кейсах значениях. В случае, если значение совпадёт, будет выполнен блок кода до оператора \code{break;}, если же значение переменной не совпадёт ни с одним из описанный в кейсах, выполнится блок по умолчанию \code{default}. \frm{Важно помнить, что в случае отсутствия внутри \code{case} оператора \code{break;}, программа будет выполнять последующие кейсы, пока не найдёт \code{break;} или пока не закончится конструкция \code{switch()\{\}}, то есть пока не встретится её закрывающая фигурная скобка.} В кейсах мы опишем присваивание результата в переменную \code{result}, а после выхода из \code{switch()\{\}} - вывод результата в консоль. Кейсом по умолчанию будет вывод пользователю сообщения о невозможности распознать оператор. Так получается, что даже если мы ввели неизвестный оператор, программа попытается вывести в консоль результат, что неприемлемо. Поэтому кейс по умолчанию должен содержать также и оператор \code{return 1;} вынуждающий программу экстренно завершиться с кодом ошибки \code{1}. Получится такой код: -\begin{lstlisting}[language=C,style=CCodeStyle] -#include - -int main (int argc, char *argv[]) { - float first; - float second; - float result; - int operator; - - printf("Enter first operand: "); - scanf("%f", &first); - printf("/nEnter 1 for (+), 2 for (-), 3 for (*), 4 for (/): "); - scanf("%d", &operator); - if (operator == 4) { - do { - printf("/nEnter second operand: "); - scanf("%f", &second); - } while (second == 0); - } else { - printf("/nEnter second operand: "); - scanf("%f", &second); - } - switch (operator) { - case 1: - result = first + second; - break; - case 2: - result = first - second; - break; - case 3: - result = first * second; - break; - case 4: - result = first / second; - break; - default: - printf("Unknown operator\n"); - return 1; - } - - printf("Result is: %f \n", result); - return 0; -} -\end{lstlisting} +\lstinputlisting[language=C,style=CCodeStyle]{../sources/calculator.c} Запустив описанный нами калькулятор, убедимся что все работает. Сымитируем нерадивого пользователя и несколько раз попробуем ввести при использовании четвёртого оператора цифру ноль, программа естественно не даст нам этого сделать. \begin{verbatim} $ ./program diff --git a/sources/calculator.c b/sources/calculator.c new file mode 100644 index 0000000..5c253cb --- /dev/null +++ b/sources/calculator.c @@ -0,0 +1,42 @@ +#include + +int main (int argc, char *argv[]) { + float first; + float second; + float result; + int operator; + + printf("Enter first operand: "); + scanf("%f", &first); + printf("/nEnter 1 for (+), 2 for (-), 3 for (*), 4 for (/): "); + scanf("%d", &operator); + if (operator == 4) { + do { + printf("/nEnter second operand: "); + scanf("%f", &second); + } while (second == 0); + } else { + printf("/nEnter second operand: "); + scanf("%f", &second); + } + switch (operator) { + case 1: + result = first + second; + break; + case 2: + result = first - second; + break; + case 3: + result = first * second; + break; + case 4: + result = first / second; + break; + default: + printf("Unknown operator\n"); + return 1; + } + + printf("Result is: %f \n", result); + return 0; +} diff --git a/sources/power.c b/sources/power.c new file mode 100644 index 0000000..5cc4b13 --- /dev/null +++ b/sources/power.c @@ -0,0 +1,16 @@ +#include + +int main(int argc, char *argv[]) { + int i; + int base; + int significative; + int result = 1; + printf("Enter base: "); + scanf("%d", &base); + printf("Enter significative: "); + scanf("%d", &significative); + for (i = 0; i < significative; i++) { + result *= base; + } + printf("%d powered by %d is %d \n", base, significative, result); +} diff --git a/sources/prime.c b/sources/prime.c new file mode 100644 index 0000000..97f420f --- /dev/null +++ b/sources/prime.c @@ -0,0 +1,21 @@ +#include + +int main(int argc, char *argv[]) { + int number; + int dividers = 0, i = 1; + printf("Enter number: "); + scanf("%d", &number); + while (i <= number) { + if (number++ % i == 0) { + dividers++; + } else { + continue; + } + if (dividers == 3) + break; + } + printf("Number %d is%s prime", + number, + (dividers == 2) ? "" : " not" + ); +}