Язык Turbo C 2.0
Основы программирования - 2
Ввод данных: 3 int
a - простые переменные
j - ввод данных
s - функции
1 - 22k, 2 - 24k, 7 - 25k, 14 - 26k
*/
#include <conio.h>
#include <math.h>
#include <stdio.h>
s (); /* нет корней */
t (); /* решение - любое число */
v (float); /* 1 корень */
w (float, float); /* 2 корня */
x (float, float, float); /* 3 корня */
y (float, float, float, float); /* 4 корня */
main ()
{
int a, b, c;
float d, e;
int g, h, i; /* натуральные числа */
int j, k, l; /* ввод данных */
printf ("Введите 3 целых числа: ");
scanf ("%i%i%i", &j, &k, &l);
/* 13.1.2.1. Составить алгоритм решения квадратного уравнения:
ax^2 + bx + c = 0. */
printf ("1. ");
if (j == 0)
if (k == 0)
if (l == 0)
t ();
else
s ();
else
v ((float) -l / k);
else
{
a = k * k - 4 * j * l; /* дискриминант */
if (a < 0)
s ();
else
if (a == 0)
v (-k / 2. / j);
else
w ((-k - sqrt (a)) / 2 / j, (-k + sqrt (a)) / 2 / j);
}
/* 21.5.3.2. Построить алгоритм решения биквадратного уравнения,
используя как вспомогательный алгоритм решения квадратного уравнения. */
printf ("2. ");
if (j == 0)
if (k == 0)
if (l == 0)
t ();
else
s ();
else
{
d = (float) -l / k;
if (d < 0)
s ();
else
if (d == 0)
v (0);
else
w (-sqrt (d), sqrt (d));
}
else
{
a = k * k - 4 * j * l; /* дискриминант */
if (a < 0)
s ();
else
if (a == 0)
{
d = -k / 2. / j;
if (d < 0)
s ();
else
if (d == 0)
v (0);
else
w (-sqrt (d), sqrt (d));
}
else
{
d = (-k - sqrt (a)) / 2 / j;
e = (-k + sqrt (a)) / 2 / j;
if (d < 0)
if (e < 0)
s ();
else
if (e == 0)
v (0);
else
w (-sqrt (e), sqrt (e));
else
if (d == 0)
if (e < 0)
v (0);
else
x (-sqrt (e), 0, sqrt (e));
else
if (e < 0)
w (-sqrt (d), sqrt (d));
else
if (e == 0)
x (-sqrt (d), 0, sqrt (d));
else
y (-sqrt (e), -sqrt (d), sqrt (d), sqrt (e));
}
}
/* 16.1.4.3. Дано целое положительное число n. Вычислить n! */
a = 1;
for (b = 2; b < j + 1; b++) a *= b;
printf ("3. %i! = %i.\n", j, a);
/* 18.1.5.4. Даны два натуральных числа M и N. Вычислить их наибольший
общий делитель НОД (M, N). */
g = j; /* вычисление натуральных чисел */
h = k;
i = l;
if (g < 0) g = -g;
if (h < 0) h = -h;
if (i < 0) i = -i;
if (g == 0) g = 1;
if (h == 0) h = 1;
if (i == 0) i = 1;
a = g;
b = h;
while (a - b) if (a > b) a -= b; else b -= a;
printf ("4. НОД (%i, %i) = %i.\n", g, h, a);
/* 21.6.6.5. Составить алгоритм нахождения НОД трех натуральных чисел,
используя вспомогательный алгоритм нахождения НОД двух чисел. */
a = g;
b = h;
while (a - b) if (a > b) a -= b; else b -= a;
b = i;
while (a - b) if (a > b) a -= b; else b -= a;
printf ("5. НОД (%i, %i, %i) = %i.\n", g, h, i, a);
/* 21.3.10.6. Даны три положительных числа. Составить алгоритм,
определяющий, могут ли они быть длинами сторон треугольника. */
if (j > 0 && k > 0 && l > 0 && j + k > l && j + l > k && k + l > j)
printf ("6. Числа могут быть длинами сторон треугольника.\n");
else
printf ("6. Числа не могут быть длинами сторон треугольника.\n");
/* 21.4.11.7. Пусть компьютер способен выполнять только две
арифметические операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух чисел;
в) получения остатка от целочисленного деления двух чисел. */
a = 0;
for (b = 0; b < g; b++) a += h;
printf ("7. %i * %i = %i, ", g, h, a);
a = 0;
b = g;
while (b >= h) {b -= h; a++;}
printf ("%i / %i = %i, ", g, h, a);
printf ("%i %% %i = %i.\n", g, h, b);
/* 33.1.12.8. Оттранслируйте с алгоритмического языка алгоритм выбора
наибольшего значения из трех. */
printf ("8. ");
if (j > k)
if (j > l)
printf ("Первое число наибольшее.\n");
else
printf ("Третье число наибольшее.\n");
else
if (k > l)
printf ("Второе число наибольшее.\n");
else
printf ("Третье число наибольшее.\n");
/* 48.9.13.9. Присвоить переменной h значение цифры, стоящей в разряде
сотен в записи положительного целого числа k (например, если k = 28796,
то h = 7). */
printf ("9. Число сотен %i.\n", j % 1000 / 100);
/* 48.10.14.10. Целой переменной S присвоить значение суммы цифр
трехзначного целого числа k. */
a = j % 1000;
printf ("10. Сумма цифр %i.\n", a / 100 + a / 10 % 10 + a % 10);
/* 65.1.16.11. Вычислить сумму целых чисел от M до N путем прямого
суммирования. */
a = 0;
b = j;
while (1)
{
a += b;
if (b >= k) break;
b++;
}
printf ("11. Сумма ряда %i.\n", a);
/* 68.8.21.12. Дано целое n > 2. Напечатать все простые числа из
диапазона [2, n]. */
printf ("\n12. Простые числа: ");
for (a = 2; a <= j; a++)
{
c = 0;
for (b = 2; b <= sqrt (a + .1); b++)
if (a % b == 0) c = 1;
if (c == 0) printf ("%i ", a);
if (a == 32767) break;
}
/* 71.1.26.13. Даны два натуральных числа a и b. Определить наибольший
общий делитель трех величин: a + b, abs (a - b), a * b. */
a = j + k;
b = j - k;
if (a < 0) a = -a;
if (b < 0) b = -b;
if (a == 0) a = 1;
if (b == 0) b = 1;
while (a - b) if (a > b) a -= b; else b -= a;
b = j * k;
if (b < 0) b = -b;
if (b == 0) b = 1;
while (a - b) if (a > b) a -= b; else b -= a;
printf ("\n\n13. НОД = %i.\n", a);
/* 80.1.27.14. Составить программу вычисления площади кольца по
значениям внутреннего и внешнего радиусов, используя подпрограмму
вычисления площади круга (2 варианта: с процедурой и с функцией). */
d = 3.141592653589 * (j * j - k * k);
printf ("14. Площадь кольца %.4g.\n", d);
getch ();
printf ("\n");
}
s () {printf ("Нет решений.\n");}
t () {printf ("Решение - любое число.\n");}
v (float a) {printf ("x = %.4g.\n", a);}
w (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
x (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
y (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}
Присоединяйтесь — мы покажем вам много интересного
Присоединяйтесь к ОК, чтобы подписаться на группу и комментировать публикации.
Нет комментариев