Основы программирования Язык Turbo C 2.0 */ /* 1 - 15k, 2 - 22k, 4 - 23k, 6 - 24k, 10 - 26k 13 - 27k, 20 - 28k */ #include <conio.h> #include <math.h> #include <stdio.h> aa (); ab (); ac (float); ad (float, float); ae (float, float, float); af (float, float, float, float); ag (int); /* перевод целого числа в натуральное */ float aj (int, int, int, int); /* расстояние между двумя точками на плоскости */ float ak (float, float, float); /* площадь треугольника по формуле Герона */ main () { int a, b, c, d, e, f; /* ввод данных */ float g; /* ввод данных */ int j, k, l; /* натуральные числа */ int m, n, o; float p, q, r; printf ("? (1-3) "); scanf ("%i", &a); if (a == 1) goto aaa; /* 3 int */ if (a == 2) goto aab; /* 6 int, 1 float */ if (a == 3) goto aac; /* специальный ввод */ printf ("\n"); return; aaa: printf ("Введите три целых числа: "); scanf ("%i%i%i", &a, &b, &c); /* 13.1.2.2. Составить алгоритм решения квадратного уравнения ax^2 + bx + c = 0. */ printf ("2. "); if (a == 0) if (b == 0) if (c == 0) ab (); else aa (); else { p = (float) -c / b; ac (p); } else { m = b * b - 4 * a * c; if (m < 0) aa (); else if (m == 0) { p = -b / 2. / a; ac (p); } else { p = (-b - sqrt (m)) / 2 / a; q = (-b + sqrt (m)) / 2 / a; ad (p, q); } } /* 16.1.3.3. Дано целое положительное число n. Вычислить n! */ m = 1; n = a + 1; for (o = 2; o < n; o++) m *= o; printf ("3. %i! = %i.\n", a, m); /* 18.1.4.4. Даны два натуральных числа M и N. Вычислить их наибольший общий делитель НОД (M, N). */ m = j = ag (a); n = k = ag (b); l = ag (c); while (m - n) if (m > n) m -= n; else n -= m; printf ("4. НОД (%i, %i) = %i.\n", a, b, m); /* 21.3.8.8. Даны три положительных числа. Составить алгоритм, определяющий, могут ли они быть длинами сторон треугольника. */ if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a) printf ("8. Числа могут быть длинами сторон треугольника.\n"); else printf ("8. Числа не могут быть длинами сторон треугольника.\n"); /* 21.4.9.9. Пусть компьютер способен выполнять только две арифметические операции - сложение и вычитание. Составить алгоритмы: а) умножения двух целых чисел; б) целочисленного деления двух целых чисел; в) получения остатка от целочисленного деления двух чисел. */ m = 0; for (n = 0; n < k; n++) m += j; printf ("9. %i * %i = %i, ", j, k, m); m = j; n = 0; while (m >= k) {m -= k; n++;} printf ("%i / %i = %i, %i %% %i = %i.\n", j, k, n, j, k, m); /* 21.5.10.10. Построить алгоритм решения биквадратного уравнения, используя как вспомогательный алгоритм решения квадратного уравнения. */ printf ("10. "); if (a == 0) if (b == 0) if (c == 0) ab (); else aa (); else { p = (float) -c / b; if (p < 0) aa (); else if (p == 0) ac (0); else ad (-sqrt (p), sqrt (p)); } else { m = b * b - 4 * a * c; /* дискриминант биквадратного уравнения */ if (m < 0) aa (); else if (m == 0) { p = -b / 2. / a; if (p < 0) aa (); else if (p == 0) ac (0); else ad (-sqrt (p), sqrt (p)); } else { p = (-b - sqrt (m)) / 2 / a; q = (-b + sqrt (m)) / 2 / a; if (p < 0) if (q < 0) aa (); else if (q == 0) ac (0); else ad (-sqrt (q), sqrt (q)); else if (p == 0) if (q < 0) ac (0); else ae (-sqrt (q), 0, sqrt (q)); else if (q < 0) ad (-sqrt (p), sqrt (p)); else if (q == 0) ae (-sqrt (p), 0, sqrt (p)); else af (-sqrt (q), -sqrt (p), sqrt (p), sqrt (q)); } } /* 1 */ /* 21.6.11.11. Составить алгоритм нахождения НОД трех натуральных чисел, используя как вспомогательный алгоритм находения НОД двух чисел. */ m = j; n = k; while (m - n) if (m > n) m -= n; else n -= m; n = l; while (m - n) if (m > n) m -= n; else n -= m; printf ("11. НОД (%i, %i, %i) = %i.\n", a, b, c, m); /* 33.1.12.12. Оттранслируйте с алгоритмического языка алгоритм выбора наибольшего значения из трех. */ printf ("12. "); if (a >= b && a >= c) printf ("Первое число больше.\n"); else if (b >= a && b >= c) printf ("Второе число больше.\n"); else printf ("Третье число больше.\n"); /* 48.9.21.13. Присвоить целой переменной h значение цифры, стоящей в разряде сотен в записи положительного целого числа k (например, если k = 28796, то h = 7). */ printf ("13. h = %i.\n", a / 100 % 10); /* 48.10.22.14. Целой переменной S присвоить значение суммы цифр трехзначного целого числа k. */ m = 0; n = a; while (n) { m += n % 10; n /= 10; } printf ("14. Сумма цифр числа %i.\n", m); /* 63.1.31.16. По длинам трех сторон треугольника a, b, c вычислить его площадь. */ printf ("16. Площадь треугольника %.4g.\n", ak (a, b, c)); /* 64.2.32.17. В следующем фрагменте программы вычисляется сумма конечного числа членов гармонического ряда: 1 + 1 / 2 + 1 / 3 + ... + 1 / i + ... Суммирование прекращается, когда очередное слагаемое становится меньше epsilon или целая переменная i достигает значения maxint. */ p = 0; m = a; while (m > 0) p += 1. / m--; printf ("17. Сумма гармонического ряда %g.\n", p); /* 65.1.33.18. Вычислить сумму целых чисел от M до N путем прямого суммирования. */ m = 0; /* сумма */ n = a; /* счетчик */ while (1) { if (n > b) break; m += n; if (n == 32767) break; n++; } printf ("18. Сумма чисел от %i до %i равна %i.\n", a, b, m); /* 67.1.34.19. Получить на экране коды букв латинского алфавита. */ printf ("19.\n"); for (m = 'a'; m <= 'z'; m++) printf ("%c - %-3i ", m, m); printf ("\n"); goto aaz; aab: printf ("Введите шесть целых чисел: "); scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f); printf ("Введите рациональное число: "); scanf ("%f", &g); /* 11.1.1.1. Деление дробей. */ printf ("1. %i / %i : %i / %i = %i / %i.\n", a, b, c, d, a * d, b * c); /* 19.1.5.5. Составить алгоритм вычисления степенной функции с целым показателем y = x^k, где k - целое число, x != 0. */ if (!g) p = 0; else { p = 1; if (a > 0) for (m = 0; m < a; m++) p *= g; if (a < 0) for (m = 0; m > a; m--) p /= g; } printf ("5. %g ^ %i = %g.\n", g, a, p); /* 21.1.6.6. Даны декартовы координаты трех вершин треугольника на плоскости. Составить алгоритм определения площади треугольника. */ p = aj (a, b, c, d); q = aj (a, b, e, f); r = aj (c, d, e, f); printf ("6. Площадь треугольника %g.\n", ak (p, q, r)); /* 21.2.7.7. Дана скорость ракеты при выходе за пределы атмосферы Земли. Составить алгоритм определения того, как будет двигаться ракета после выключения двигателей. (Напомним величины трех космических скоростей: 7,5 км/с; 11,2 км/с; 16,4 км/с.) */ printf ("7. Ракета "); if (g < 7.5) printf ("упадет на Землю"); else if (g == 7.5) printf ("будет двигаться вокруг Земли по кругу"); else if (g < 11.2) printf ("будет двигаться вокруг Земли по эллипсу"); else if (g == 11.2) printf ("будет двигаться вокруг Солнца по кругу"); else if (g < 16.4) printf ("будет двигаться вокруг Солнца по эллипсу"); else if (g == 16.4) printf ("улетит от Солнца по параболе"); else printf ("улетит от Солнца по гиперболе"); printf (".\n"); goto aaz; aac: /* 57.4.27.15. Составьте программу вычисления суммы двух целых чисел, которая будет вести диалог с пользователем в следующем виде (на месте многоточий - вводимые и выводимые числа): ВВЕДИТЕ ДВА СЛАГАЕМЫХ a = . . . . . b = . . . . . РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ a + b = . . . . . */ printf ("15. Введите два слагаемых:\na = "); scanf ("%i", &a); printf ("b = "); scanf ("%i", &b); printf ("Результат вычислений:\na + b = %i\n\n", a + b); /* 67.3.35.20. Составить программу, по которой будет вводиться последовательность символов до тех пор, пока не встретится маленькая или большая латинская буква z. Подсчитать, сколько раз среди вводимых символов встречалась буква W. */ printf ("20. Введите символ: "); b = 0; while (1) { a = getche (); if (a == 'z') break; if (a == 'W') b++; } printf ("\nБуква W встретилась %i раз.\n", b); aaz: j++; k++; l++; getch (); printf ("\n"); } aa () {printf ("Нет решений.\n");} ab () {printf ("Решение - любое число.\n");} ac (float a) {printf ("x = %.4g.\n", a);} ad (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);} ae (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);} af (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);} ag (int a) { if (a == -32768) a = 32767; if (a < 0) a = -a; if (!a) a = 1; return a; } float aj (int a, int b, int c, int d) { int e; e = (c - a) * (c - a) + (d - b) * (d - b); if (e < 0) e = 0; return sqrt (e); } float ak (float a, float b, float c) { float d, e; d = (a + b + c) / 2; e = d * (d - a) * (d - b) * (d - c); if (e < 0) e = 0; return sqrt (e); }
Группа для программистов ( programming )
:Юрий Казекин
/* p11
Основы программирования
Язык Turbo C 2.0 */
/* 1 - 15k, 2 - 22k, 4 - 23k, 6 - 24k, 10 - 26k
13 - 27k, 20 - 28k */
#include <conio.h>
#include <math.h>
#include <stdio.h>
aa ();
ab ();
ac (float);
ad (float, float);
ae (float, float, float);
af (float, float, float, float);
ag (int); /* перевод целого числа в натуральное */
float aj (int, int, int, int); /* расстояние между двумя точками на плоскости */
float ak (float, float, float); /* площадь треугольника по формуле Герона */
main ()
{
int a, b, c, d, e, f; /* ввод данных */
float g; /* ввод данных */
int j, k, l; /* натуральные числа */
int m, n, o;
float p, q, r;
printf ("? (1-3) ");
scanf ("%i", &a);
if (a == 1) goto aaa; /* 3 int */
if (a == 2) goto aab; /* 6 int, 1 float */
if (a == 3) goto aac; /* специальный ввод */
printf ("\n");
return;
aaa:
printf ("Введите три целых числа: ");
scanf ("%i%i%i", &a, &b, &c);
/* 13.1.2.2. Составить алгоритм решения квадратного уравнения
ax^2 + bx + c = 0. */
printf ("2. ");
if (a == 0)
if (b == 0)
if (c == 0)
ab ();
else
aa ();
else
{
p = (float) -c / b;
ac (p);
}
else
{
m = b * b - 4 * a * c;
if (m < 0)
aa ();
else
if (m == 0)
{
p = -b / 2. / a;
ac (p);
}
else
{
p = (-b - sqrt (m)) / 2 / a;
q = (-b + sqrt (m)) / 2 / a;
ad (p, q);
}
}
/* 16.1.3.3. Дано целое положительное число n. Вычислить n! */
m = 1;
n = a + 1;
for (o = 2; o < n; o++) m *= o;
printf ("3. %i! = %i.\n", a, m);
/* 18.1.4.4. Даны два натуральных числа M и N. Вычислить их наибольший
общий делитель НОД (M, N). */
m = j = ag (a); n = k = ag (b); l = ag (c);
while (m - n) if (m > n) m -= n; else n -= m;
printf ("4. НОД (%i, %i) = %i.\n", a, b, m);
/* 21.3.8.8. Даны три положительных числа. Составить алгоритм,
определяющий, могут ли они быть длинами сторон треугольника. */
if (a > 0 && b > 0 && c > 0 && a + b > c && a + c > b && b + c > a)
printf ("8. Числа могут быть длинами сторон треугольника.\n");
else
printf ("8. Числа не могут быть длинами сторон треугольника.\n");
/* 21.4.9.9. Пусть компьютер способен выполнять только две
арифметические операции - сложение и вычитание. Составить алгоритмы:
а) умножения двух целых чисел;
б) целочисленного деления двух целых чисел;
в) получения остатка от целочисленного деления двух чисел. */
m = 0;
for (n = 0; n < k; n++) m += j;
printf ("9. %i * %i = %i, ", j, k, m);
m = j;
n = 0;
while (m >= k) {m -= k; n++;}
printf ("%i / %i = %i, %i %% %i = %i.\n", j, k, n, j, k, m);
/* 21.5.10.10. Построить алгоритм решения биквадратного уравнения,
используя как вспомогательный алгоритм решения квадратного уравнения.
*/
printf ("10. ");
if (a == 0)
if (b == 0)
if (c == 0)
ab ();
else
aa ();
else
{
p = (float) -c / b;
if (p < 0)
aa ();
else
if (p == 0)
ac (0);
else
ad (-sqrt (p), sqrt (p));
}
else
{
m = b * b - 4 * a * c; /* дискриминант биквадратного уравнения */
if (m < 0)
aa ();
else
if (m == 0)
{
p = -b / 2. / a;
if (p < 0)
aa ();
else
if (p == 0)
ac (0);
else
ad (-sqrt (p), sqrt (p));
}
else
{
p = (-b - sqrt (m)) / 2 / a;
q = (-b + sqrt (m)) / 2 / a;
if (p < 0)
if (q < 0)
aa ();
else
if (q == 0)
ac (0);
else
ad (-sqrt (q), sqrt (q));
else
if (p == 0)
if (q < 0)
ac (0);
else
ae (-sqrt (q), 0, sqrt (q));
else
if (q < 0)
ad (-sqrt (p), sqrt (p));
else
if (q == 0)
ae (-sqrt (p), 0, sqrt (p));
else
af (-sqrt (q), -sqrt (p), sqrt (p), sqrt (q));
}
} /* 1 */
/* 21.6.11.11. Составить алгоритм нахождения НОД трех натуральных
чисел, используя как вспомогательный алгоритм находения НОД двух чисел.
*/
m = j; n = k;
while (m - n) if (m > n) m -= n; else n -= m;
n = l;
while (m - n) if (m > n) m -= n; else n -= m;
printf ("11. НОД (%i, %i, %i) = %i.\n", a, b, c, m);
/* 33.1.12.12. Оттранслируйте с алгоритмического языка алгоритм выбора
наибольшего значения из трех. */
printf ("12. ");
if (a >= b && a >= c)
printf ("Первое число больше.\n");
else
if (b >= a && b >= c)
printf ("Второе число больше.\n");
else
printf ("Третье число больше.\n");
/* 48.9.21.13. Присвоить целой переменной h значение цифры, стоящей в
разряде сотен в записи положительного целого числа k (например, если
k = 28796, то h = 7). */
printf ("13. h = %i.\n", a / 100 % 10);
/* 48.10.22.14. Целой переменной S присвоить значение суммы цифр
трехзначного целого числа k. */
m = 0;
n = a;
while (n)
{
m += n % 10;
n /= 10;
}
printf ("14. Сумма цифр числа %i.\n", m);
/* 63.1.31.16. По длинам трех сторон треугольника a, b, c вычислить его
площадь. */
printf ("16. Площадь треугольника %.4g.\n", ak (a, b, c));
/* 64.2.32.17. В следующем фрагменте программы вычисляется сумма
конечного числа членов гармонического ряда:
1 + 1 / 2 + 1 / 3 + ... + 1 / i + ...
Суммирование прекращается, когда очередное слагаемое становится меньше
epsilon или целая переменная i достигает значения maxint. */
p = 0;
m = a;
while (m > 0) p += 1. / m--;
printf ("17. Сумма гармонического ряда %g.\n", p);
/* 65.1.33.18. Вычислить сумму целых чисел от M до N путем прямого
суммирования. */
m = 0; /* сумма */
n = a; /* счетчик */
while (1)
{
if (n > b) break;
m += n;
if (n == 32767) break;
n++;
}
printf ("18. Сумма чисел от %i до %i равна %i.\n", a, b, m);
/* 67.1.34.19. Получить на экране коды букв латинского алфавита. */
printf ("19.\n");
for (m = 'a'; m <= 'z'; m++) printf ("%c - %-3i ", m, m);
printf ("\n");
goto aaz;
aab:
printf ("Введите шесть целых чисел: ");
scanf ("%i%i%i%i%i%i", &a, &b, &c, &d, &e, &f);
printf ("Введите рациональное число: ");
scanf ("%f", &g);
/* 11.1.1.1. Деление дробей. */
printf ("1. %i / %i : %i / %i = %i / %i.\n", a, b, c, d, a * d, b * c);
/* 19.1.5.5. Составить алгоритм вычисления степенной функции с целым
показателем y = x^k, где k - целое число, x != 0. */
if (!g)
p = 0;
else
{
p = 1;
if (a > 0) for (m = 0; m < a; m++) p *= g;
if (a < 0) for (m = 0; m > a; m--) p /= g;
}
printf ("5. %g ^ %i = %g.\n", g, a, p);
/* 21.1.6.6. Даны декартовы координаты трех вершин треугольника на
плоскости. Составить алгоритм определения площади треугольника. */
p = aj (a, b, c, d);
q = aj (a, b, e, f);
r = aj (c, d, e, f);
printf ("6. Площадь треугольника %g.\n", ak (p, q, r));
/* 21.2.7.7. Дана скорость ракеты при выходе за пределы атмосферы
Земли. Составить алгоритм определения того, как будет двигаться ракета
после выключения двигателей. (Напомним величины трех космических
скоростей: 7,5 км/с; 11,2 км/с; 16,4 км/с.) */
printf ("7. Ракета ");
if (g < 7.5) printf ("упадет на Землю");
else if (g == 7.5) printf ("будет двигаться вокруг Земли по кругу");
else if (g < 11.2) printf ("будет двигаться вокруг Земли по эллипсу");
else if (g == 11.2) printf ("будет двигаться вокруг Солнца по кругу");
else if (g < 16.4) printf ("будет двигаться вокруг Солнца по эллипсу");
else if (g == 16.4) printf ("улетит от Солнца по параболе");
else printf ("улетит от Солнца по гиперболе");
printf (".\n");
goto aaz;
aac:
/* 57.4.27.15. Составьте программу вычисления суммы двух целых чисел,
которая будет вести диалог с пользователем в следующем виде (на месте
многоточий - вводимые и выводимые числа):
ВВЕДИТЕ ДВА СЛАГАЕМЫХ
a = . . . . .
b = . . . . .
РЕЗУЛЬТАТ ВЫЧИСЛЕНИЙ
a + b = . . . . . */
printf ("15. Введите два слагаемых:\na = ");
scanf ("%i", &a);
printf ("b = ");
scanf ("%i", &b);
printf ("Результат вычислений:\na + b = %i\n\n", a + b);
/* 67.3.35.20. Составить программу, по которой будет вводиться
последовательность символов до тех пор, пока не встретится маленькая или
большая латинская буква z. Подсчитать, сколько раз среди вводимых
символов встречалась буква W. */
printf ("20. Введите символ: ");
b = 0;
while (1)
{
a = getche ();
if (a == 'z') break;
if (a == 'W') b++;
}
printf ("\nБуква W встретилась %i раз.\n", b);
aaz:
j++; k++; l++;
getch ();
printf ("\n");
}
aa () {printf ("Нет решений.\n");}
ab () {printf ("Решение - любое число.\n");}
ac (float a) {printf ("x = %.4g.\n", a);}
ad (float a, float b) {printf ("x1 = %.4g, x2 = %.4g.\n", a, b);}
ae (float a, float b, float c) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g.\n", a, b, c);}
af (float a, float b, float c, float d) {printf ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.\n", a, b, c, d);}
ag (int a)
{
if (a == -32768) a = 32767;
if (a < 0) a = -a;
if (!a) a = 1;
return a;
}
float aj (int a, int b, int c, int d)
{
int e;
e = (c - a) * (c - a) + (d - b) * (d - b);
if (e < 0) e = 0;
return sqrt (e);
}
float ak (float a, float b, float c)
{
float d, e;
d = (a + b + c) / 2;
e = d * (d - a) * (d - b) * (d - c);
if (e < 0) e = 0;
return sqrt (e);
}