Язык 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);}
Группа для программистов ( programming )
:Юрий Казекин
/* p2 - 13
Язык 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);}