初音ミクこんばんは Опубликовано 8 июня, 2016 Автор Жалоба Поделиться Опубликовано 8 июня, 2016 (изменено) У меня есть задачник по программированию. Ну самый обычный задачник - 7 тем, в каждой теме около 36 задач. От простых до самых сложных. Я, естественно, взялся за первый раздел. И у меня 6 дорог. Перечисляю. Эти задачи можно решить 6-ю средствами программирования:C;C со структурами;C с классами (C++);Visual Basic 5.0;Visual C++ 6.0;Visual C++ 7.0.Все 6 способов мне доступны (по крайней мере, теоретически). По любой из дорог я могу идти. Какую выбрать?Что делать?Мне нет смысла решать ВСЕ задачи 6 раз каждую. Но в то же время интересен каждый из этих способов, так как нету практики.И ещё отдельный вопрос - а где взять задачи, заточенные именно под ООП? Я их не наблюдаю... А хотелось бы применить эту концепцию программирования.Муки выбора... А.Г. Юркин, "Задачник по программированию". 2002 г. ("Юркин задачник")Часть III. Прикладные математические задачи.Глава 7. Арифметика. Страница 77, задача 7.1. Натуральное число в p-ичной системе счисления задано своими цифрами, хранящимися в массиве K (n). Проверить корректность такого представления и перевести число в q-ичную систему (возможно, число слишком велико, чтобы получить его внутреннее представление; кроме того, p ≤ 10, q ≤ 10). Скачать программу, её текст и скриншоты:https://yadi.sk/d/4YZGX3LgsyqyXПрограмма совместима с MS-DOS, Windows 95, Windows 2000, Windows Vista 32-bit.Скриншоты:----------------------------------------D:\>cd work D:\WORK>dir Volume in drive D has no label Volume Serial Number is 0C6D-11F0 Directory of D:\WORK . <DIR> 06-26-16 10:34a ... <DIR> 06-26-16 10:34a ..EGAVGA BGI 5,554 02-18-92 3:00a EGAVGA.BGITC BAT 12 06-26-16 10:34a TC.BATTCPICK TCP 1,196 07-04-16 1:10p TCPICK.TCPTCCONFIG TC 1,690 06-26-16 11:03a TCCONFIG.TCP77 BAK 2,552 07-04-16 1:01p P77.BAKP77 C 2,720 07-04-16 1:05p P77.CDONE-1 <DIR> 06-30-16 9:49a DONE-1P77A C 861 07-01-16 7:40a P77A.CP77B C 1,800 07-02-16 6:25p P77B.CP77 OBJ 1,974 07-04-16 1:05p P77.OBJP77 EXE 16,907 07-04-16 1:05p P77.EXE 10 file(s) 35,266 bytes 3 dir(s) 104,294,400 bytes free D:\WORK>----------------------------------------P77 EXE 16,907 07-04-16 1:05p P77.EXE 10 file(s) 35,266 bytes 3 dir(s) 104,294,400 bytes free D:\WORK>p77Основание первой системы счисления: 6.Исходное число:305003355353403410124202243510302244255011321340001513332510022524343343Промежуточное число в десятичной системе счисления:000000000000000055664707093046964168171692001782840499583747901638733679Основание второй системы счисления: 9.Конечное число:24521055280543813208204360708881333086022846352066040662160 D:\WORK>p77Основание первой системы счисления: 10.Исходное число:5226524812744766010775243555714506442709497767068114642959602539897612Промежуточное число в десятичной системе счисления:5226524812744766010775243555714506442709497767068114642959602539897612Основание второй системы счисления: 8.Конечное число:140734644037735311255677172054235673252536724056404004567741205054231626221414---------------------------------------- Текст программы: /* p77 Язык Turbo C 2.0 Задачник по программированию Системы счисления */ #include <conio.h> #include <stdio.h> #include <stdlib.h> #include <time.h> main () { int a [100]; /* исходный массив данных */ int b [100]; /* промежуточный массив данных в десятичной системе счисления */ int c [100]; /* вспомогательный массив данных */ int d [400]; /* целевой массив данных */ int f; /* основание первой системы счисления */ int g; /* основание второй системы счисления */ int h; /* число цифр исходного числа */ int k, l, m, n; randomize (); f = rand () % 9 + 2; g = rand () % 9 + 2; h = rand () % 100 + 1; for (k = 0; k < 100; k++) a [k] = b [k] = c [k] = 0; for (k = 0; k < 400; k++) d [k] = 0; for (k = 0; k < h; k++) a [k] = b [k] = rand () % f; printf ("Основание первой системы счисления: %i.\n", f); printf ("Исходное число:\n"); for (k = h - 1; k >= 0; k--) printf ("%i", a [k]); printf ("\n"); for (k = 0; k < h - 1; k++) { /* Домножаем на основание системы счисления со сдвигом влево */ for (l = 0; l <= k; l++) c [h - 2 - l] = b [h - 1 - l] * f; /* Складываем с предыдущим разрядом */ c [h - 2 - k] += b [h - 2 - k]; /* Переносим десятки в следующий разряд */ for (l = k; l >= 0; l--) { m = c [h - 2 - l]; c [h - 2 - l] = m % 10; c [h - 1 - l] += m / 10; } /* Переносим данные вверх */ for (l = k; l >= -1; l--) { b [h - 2 - l] = c [h - 2 - l]; c [h - 2 - l] = 0; } } printf ("Промежуточное число в десятичной системе счисления:\n"); for (k = h - 1; k >= 0; k--) printf ("%i", b [k]); printf ("\n"); n = 0; /* указатель в целевом массиве данных на заполняемую ячейку данных */ while (1) { l = 0; /* остаток от деления предыдущего разряда */ for (k = 0; k < h; k++) { m = l * 10 + b [h - 1 - k]; c [h - 1 - k] = m / g; l = m % g; } d [n++] = l; /* заносим остаток от деления в целевой массив данных */ m = 0; for (k = 0; k < h; k++) /* переносим результат деления вверх для следующего цикла */ { b [k] = c [k]; if (b [k]) m = 1; /* флаг наличия ненулевых значений в массиве */ } if (!m) break; /* расчет окончен */ } printf ("Основание второй системы счисления: %i.\n", g); printf ("Конечное число:\n"); for (k = n - 1; k >= 0; k--) printf ("%i", d [k]); printf ("\n"); getch (); printf ("\n"); } Изменено 5 июля, 2016 пользователем MrStitch (смотреть историю редактирования) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 10 июля, 2016 Автор Жалоба Поделиться Опубликовано 10 июля, 2016 Список доступных мне языков программирования: Turbo C 2.0: CTurbo C 2.0: C со структурамиBorland C++ 3.1: СBorland C++ 3.1: C со структурамиBorland C++ 3.1: С с классамиVisual Basic 5.0Visual C++ 6.0Visual C++ 7.0 Целых 8. И на любом из них можно написать что угодно. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 13 июля, 2016 Автор Жалоба Поделиться Опубликовано 13 июля, 2016 Очередной задачник по программированию. Задача: В написанном выражении((((1 ? 2) ? 3) ? 4) ? 5) ? 6вместо каждого знака ? вставить знак одного из четырёх арифметических действий: +, -, *, / так, чтобы результат вычислений равнялся 35. Автор объяснил словами, как эта задача решается. Но что-то мне это решение не нравится. Например:"Рассмотрим программу, начиная с метки R. Здесь отыскивается первый член ai в последовательности an, a(n-1), ..., a2, не равный 4. Он увеличивается на 1, а все предыдущие полагаются равными 1."И так далее.По-моему, слишком заморочено. А как же "наглядность программ"? Я пытался сотворить нечто подобное, но как-то запутался и желание программировать дальше пропало.Мы пойдём другим путём.Автор дал программу, но она на Паскале, а я Паскаль с трудом понимаю. И ответа не дал. Поэтому я сделал всё то же самое, но по-другому. // p2.cpp : Defines the entry point for the console application. // Язык Visual C++ 7.0 // Консольное приложение #include "stdafx.h" #include <conio.h> int aa (int, int, int); void ab (int); int _tmain(int argc, _TCHAR* argv[]) { int a, b, c, d, e; int f; for (a = 0; a < 4; a++) for (b = 0; b < 4; b++) for (c = 0; c < 4; c++) for (d = 0; d < 4; d++) for (e = 0; e < 4; e++) { f = aa (1, a, 2); f = aa (f, b, 3); f = aa (f, c, 4); f = aa (f, d, 5); f = aa (f, e, 6); if (f == 35) { printf ("((((1 "); ab (a); printf ("2) "); ab (B); printf ("3) "); ab (c); printf ("4) "); ab (d); printf ("5) "); ab (e); printf ("6 = 35.\n"); } } getch (); return 0; } int aa (int a, int b, int c) { switch (B) { case 0: return a + c; case 1: return a - c; case 2: return a * c; case 3: return a / c; } return 0; } void ab (int a) { switch (a) { case 0: printf ("+ "); break; case 1: printf ("- "); break; case 2: printf ("* "); break; case 3: printf ("/ "); break; } }Ответ:((((1 + 2) + 3) * 4) + 5) + 6 = 35.((((1 + 2) * 3) * 4) + 5) - 6 = 35.((((1 * 2) * 3) * 4) + 5) + 6 = 35. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 23 августа, 2016 Автор Жалоба Поделиться Опубликовано 23 августа, 2016 Арифметика длинных целых чисел. Дано:9 500 000 000 000 000 000 000 0001 983 000 000 000 000 000 000 000 000 000 000Перемножить. Вот что выдаёт программа:9 500 000 000 000 000 000 000 0001 983 000 000 000 000 000 000 000 000 000 00018 838 500 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 /* p8 Язык Turbo C 2.0 Арифметика длинных чисел */ #include <conio.h> #include <stdio.h> main () { int a [100], b, c; int d [100], e, f; int g [100], h, i; /* число; число значащих цифр; число нулей */ int j, k; /* начальные данные */ for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0; a [0] = 9; a [1] = 5; b = 2; c = 23; d [0] = 1; d [1] = 9; d [2] = 8; d [3] = 3; e = 4; f = 30; /* печатаем первое число */ for (j = 0; j < b + c; j++) { printf ("%i", a [j]); k = b + c - j - 1; if (k % 3 == 0 && k) printf (" "); } /* печатаем второе число */ printf ("\n"); for (j = 0; j < e + f; j++) { printf ("%i", d [j]); k = e + f - j - 1; if (k % 3 == 0 && k) printf (" "); } /* перемножаем числа */ for (j = 0; j < b; j++) for (k = 0; k < e; k++) g [j + k + 1] += a [j] * d [k]; h = b + e; i = c + f; /* складываем десятки с единицами из соседних разрядов */ for (j = h - 1; j; j--) { g [j - 1] = g [j - 1] + g [j] / 10; g [j] = g [j] % 10; } /* проверяем, является ли первая цифра значащей или нет */ if (g [0] == 0) { for (j = 0; j < h - 1; j++) g [j] = g [j + 1]; g [h - 1] = 0; h--; } /* печатаем третье число */ printf ("\n"); for (j = 0; j < h + i; j++) { printf ("%i", g [j]); k = h + i - j - 1; if (k % 3 == 0 && k) printf (" "); } printf ("\n"); getch (); printf ("\n"); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 28 августа, 2016 Автор Жалоба Поделиться Опубликовано 28 августа, 2016 Всё то же самое, но другим макаром. /* p9 Язык Turbo C Арифметика длинных целых чисел */ #include <conio.h> #include <stdio.h> int aa [100], ab, ac; int ba [100], bb, bc; int ca [100], cb, cc; da (); /* печать первого числа */ db (); /* печать второго числа */ dc (); /* печать третьего числа */ dd (); /* ca = aa * ba */ main () { int a; for (a = 0; a < 100; a++) aa [a] = ba [a] = ca [a] = 0; aa [0] = 9; aa [1] = 5; ab = 2; ac = 23; ba [0] = 1; ba [1] = 9; ba [2] = 8; ba [3] = 3; bb = 4; bc = 30; dd (); da (); db (); dc (); getch (); printf ("\n"); } da () { int a, b; for (a = 0; a < ab + ac; a++) { printf ("%i", aa [a]); b = ab + ac - a - 1; if (b % 3 == 0 && B) printf (" "); } printf ("\n"); } db () { int a, b; for (a = 0; a < bb + bc; a++) { printf ("%i", ba [a]); b = bb + bc - a - 1; if (b % 3 == 0 && B) printf (" "); } printf ("\n"); } dc () { int a, b; for (a = 0; a < cb + cc; a++) { printf ("%i", ca [a]); b = cb + cc - a - 1; if (b % 3 == 0 && B) printf (" "); } printf ("\n"); } dd () { int a, b; for (a = 0; a < ab; a++) for (b = 0; b < bb; b++) ca [a + b + 1] += aa [a] * ba [b]; cb = ab + bb; cc = ac + bc; for (a = cb - 1; a; a--) { ca [a - 1] = ca [a - 1] + ca [a] / 10; ca [a] = ca [a] % 10; } if (ca [0] == 0) { for (a = 0; a < cb - 1; a++) ca [a] = ca [a + 1]; ca [cb - 1] = 0; cb--; } } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 22 ноября, 2017 Автор Жалоба Поделиться Опубликовано 22 ноября, 2017 /* p11 Язык Visual C++ 6.0 Основы программирования */ // Файл p11Doc.h class CP11Doc:public CDocument { protected: CP11Doc ( ); DECLARE_DYNCREATE (CP11Doc ); int aa, ab, ac; // исходные данные - целые числа int ad, ae, af; // исходные данные - натуральные числа int ag, ah; // указатель ввода в строку данных, <Enter> int ai, aj; // внутренние переменные для передачи данных char ba [50]; // место для вводимых символов CString bd [10]; // вывод информации на экран int bg [20]; double bj [10]; void ca ( ); // перевод данных из символьной формы в цифровую void cb ( ); void cd ( ); // решение задач CString ce (char *, int, double, double, double, double ); // корни уравнения (4 шт. ) void cg ( ); cj (int ); // сумма цифр целого числа }; - - - - - - - - - - - - - - - - - - - - // Файл p11Doc.cpp #include "stdafx.h" #include "math.h" #include "p11.h" #include "p11Doc.h" CP11Doc::CP11Doc ( ) { aa = ab = ac = ag = ah = 0; ba [0] = bg [0] = 0; } void CP11Doc::ca ( ) { ah = 1; // флаг начала обработки ai = 0; // временный счётчик символов массива while ((ba [ai] < '0' || ba [ai] > '9' ) && ba [ai] != '-' && ba [ai] ) ai++; cb ( ); aa = aj; while ((ba [ai] < '0' || ba [ai] > '9' ) && ba [ai] != '-' && ba [ai] ) ai++; cb ( ); ab = aj; while ((ba [ai] < '0' || ba [ai] > '9' ) && ba [ai] != '-' && ba [ai] ) ai++; cb ( ); ac = aj; // данные занесены cd ( ); // решение задач cg ( ); } void CP11Doc::cb ( ) { int a; aj = 0; // целое число, извлекаемое из массива a = 1; // знак извлекаемого числа if (ba [ai] == '-' ) {a = -1; ai++;} while (ba [ai] >= '0' && ba [ai] <= '9' ) { aj = aj * 10 + ba [ai] - '0'; ai++; } aj *= a; } void CP11Doc::cd ( ) { double a, b, c; // (1 ) 11.1. Решить уравнение: ax^2 + bx + c = 0. if (!aa ) if (!ab ) if (!ac ) bd [0] = ce ("1. ", 5, 0, 0, 0, 0 ); else bd [0] = ce ("1. ", 0, 0, 0, 0, 0 ); else { a = (double ) -ac / ab; bd [0] = ce ("1. ", 1, a, 0, 0, 0 ); } else { a = ab * ab - 4 * aa * ac; if (a < 0 ) bd [0] = ce ("1. ", 0, 0, 0, 0, 0 ); else if (!a ) { b = -ab / 2. / aa; bd [0] = ce ("1. ", 1, b, 0, 0, 0 ); } else { b = (-ab - sqrt (a ) ) / 2 / aa; c = (-ab + sqrt (a ) ) / 2 / aa; bd [0] = ce ("1. ", 2, b, c, 0, 0 ); } } // (2 ) 11.2. Решить уравнение: ax^4 + bx^2 + c = 0. if (!aa ) if (!ab ) if (!ac ) bd [1] = ce ("2. ", 5, 0, 0, 0, 0 ); else bd [1] = ce ("2. ", 0, 0, 0, 0, 0 ); else { a = (double ) -ac / ab; if (a < 0 ) bd [1] = ce ("2. ", 0, 0, 0, 0, 0 ); else if (!a ) bd [1] = ce ("2. ", 1, 0, 0, 0, 0 ); else bd [1] = ce ("2. ", 2, -sqrt (a ), sqrt (a ), 0, 0 ); } else { a = ab * ab - 4 * aa * ac; if (a < 0 ) bd [1] = ce ("2. ", 0, 0, 0, 0, 0 ); else if (!a ) { b = -ab / 2. / aa; if (b < 0 ) bd [1] = ce ("2. ", 0, 0, 0, 0, 0 ); else if (!b ) bd [1] = ce ("2. ", 1, 0, 0, 0, 0 ); else bd [1] = ce ("2. ", 2, -sqrt (b ), sqrt (b ), 0, 0 ); } else { b = (-ab - sqrt (a ) ) / 2 / aa; c = (-ab + sqrt (a ) ) / 2 / aa; if (b < 0 ) if (c < 0 ) bd [1] = ce ("2. ", 0, 0, 0, 0, 0 ); else if (!c ) bd [1] = ce ("2. ", 1, 0, 0, 0, 0 ); else bd [1] = ce ("2. ", 2, -sqrt (c ), sqrt (c ), 0, 0 ); else if (!b ) if (c < 0 ) bd [1] = ce ("2. ", 1, 0, 0, 0, 0 ); else bd [1] = ce ("2. ", 3, -sqrt (c ), 0, sqrt (c ), 0 ); else if (c < 0 ) bd [1] = ce ("2. ", 2, -sqrt (b ), sqrt (b ), 0, 0 ); else if (!c ) bd [1] = ce ("2. ", 3, -sqrt (b ), 0, sqrt (b ), 0 ); else bd [1] = ce ("2. ", 4, -sqrt (c ), -sqrt (b ), sqrt (b ), sqrt (c ) ); } } } CString CP11Doc::ce (char *a, int b, double c, double d, double e, double f ) { CString g, h; g.Format (a ); switch (b ) { case 0: h.Format ("Решений нет." ); break; case 1: h.Format ("x = %.4g.", c ); break; case 2: h.Format ("x1 = %.4g, x2 = %.4g.", c, d ); break; case 3: h.Format ("x1 = %.4g, x2 = %.4g, x3 = %.4g.", c, d, e ); break; case 4: h.Format ("x1 = %.4g, x2 = %.4g, x3 = %.4g, x4 = %.4g.", c, d, e, f ); break; default: h.Format ("Решение - любое число." ); } return g + h; } void CP11Doc::cg ( ) { int a, b, c; double d; // (3 ) 16.4. Дано целое положительное число n. Вычислить n! a = 1; for (b = 1; b < aa + 1; b++ ) a *= b; bg [1] = a; /* (4 ) 18.5. Даны два натуральных числа M и N. Вычислить их наибольший общий делитель НОД (M, N ). */ ad = aa; ae = ab; af = ac; if (ad < 0 ) ad = -ad; if (ae < 0 ) ae = -ae; if (af < 0 ) af = -af; if (!ad ) ad = 1; if (!ae ) ae = 1; if (!af ) af = 1; a = ad; b = ae; while (a - b ) if (a > b ) a -= b; else b -= a; bg [2] = a; /* (5 ) 21.3.9. Даны три положительных числа. Составить алгоритм, определяющий, могут ли они быть длинами сторон треугольника. */ if (aa > 0 && ab > 0 && ac > 0 && aa + ab > ac && aa + ac > ab && ab + ac > aa ) bd [2].Format ("5. Числа могут быть длинами сторон треугольника." ); else bd [2].Format ("5. Числа не могут быть длинами сторон треугольника." ); /* (6 ) 21.4.10. Пусть компьютер способен выполнять только две арифметические операции - сложение и вычитание. Составить алгоритмы: а ) умножения двух целых чисел; б ) целочисленного деления двух чисел; в ) получения остатка от целочисленного деления двух чисел. */ a = 0; for (b = 0; b < ae; b++ ) a += ad; bg [3] = a; a = ad; b = 0; while (a >= ae ) {a -= ae; b++;} bg [4] = b; bg [5] = a; /* (7 ) 21.6.11. Составить алгоритм нахождения НОД трёх натуральных чисел, используя вспомогательный алгоритм нахождения НОД двух чисел. */ a = ad; b = ae; while (a - b ) if (a > b ) a -= b; else b -= a; b = af; while (a - b ) if (a > b ) a -= b; else b -= a; bg [6] = a; /* (8 ) 33.12. "Оттранслируйте" с алгоритмического языка алгоритм выбора наибольшего значения из трёх. */ a = aa; if (a < ab ) a = ab; if (a < ac ) a = ac; bg [7] = a; /* (9 ) 48.9.21. Присвоить целой переменной h значение цифры, стоящей в разряде сотен в записи положительного целого числа k. Например, если k = 28796, то h = 7. */ bg [8] = aa / 100 % 10; /* (10 ) 48.10.22. Целой переменной S присвоить значение суммы цифр трёхзначного целого числа k. */ a = aa % 1000; bg [9] = a / 100 + a / 10 % 10 + a % 10; // (11 ) 63.1.31. По длинам трёх сторон треугольника вычислить его площадь. d = (aa + ab + ac ) / 2.; d = d * (d - aa ) * (d - ab ) * (d - ac ); // формула Герона if (d < 0 ) d = 0; bj [0] = sqrt (d ); /* (12 ) 64.2.32. Вычислить сумму конечного числа членов гармонического ряда: 1 + 1/2 + 1/3 + … + 1/i. Суммирование прекращается, когда очередное слагаемое становится меньше epsilon или целая переменная i достигает значения maxint. */ a = aa; if (a > 1000000 ) a = 1000000; if (a < 0 ) a = 0; d = 0; while (a ) d += 1. / a--; bj [1] = d; /* (13 ) 65.33. Вычислить сумму целых чисел от M до N путём прямого суммирования. Здесь M и N - целые числа. */ a = 0; for (b = aa; b <= ab; b++ ) a += b; bg [10] = a; /* (14 ) 70.1.41. Определите на вашем компьютере величину машинного epsilon. */ d = 1; while (1 + d > 1 ) d /= 2; bj [2] = d; /* (15 ) 71.47. Даны два натуральных числа a и b. Определить наибольший общий делитель трёх величин: a + b, |a - b|, ab. */ a = bg [11] = aa + ab; b = bg [12] = aa - ab; if (a < 0 ) a = -a; if (b < 0 ) b = -b; if (!a ) a = 1; if (!b ) b = 1; while (a - b ) if (a > b ) a -= b; else b -= a; b = bg [13] = aa * ab; if (b < 0 ) b = -b; if (!b ) b = 1; while (a - b ) if (a > b ) a -= b; else b -= a; bg [14] = a; /* (16 ) 80.3.50. Даны три целых числа. Определить, сумма цифр которого из них больше. Подсчёт суммы цифр организовать через подпрограмму. */ a = cj (aa ); b = cj (ab ); c = cj (ac ); if (a >= b && a >= c ) bd [3] = "16. Сумма цифр первого числа больше."; else if (b >= a && b >= c ) bd [3] = "16. Сумма цифр второго числа больше."; else bd [3] = "16. Сумма цифр третьего числа больше."; } CP11Doc::cj (int a ) { int b; b = 0; if (a < 0 ) a = -a; while (a ) {b += a % 10; a /= 10;} return b; } - - - - - - - - - - - - - - - - - - - - // Файл p11View.cpp void CP11View::OnDraw (CDC* pDC ) { CP11Doc *pdoc = GetDocument ( ); ASSERT_VALID (pdoc ); CString a; // выводимая строка pDC -> TextOut (10, 10, "Введите три целых числа:" ); pDC -> TextOut (10, 35, pdoc -> ba ); a.Format ("code = %i", pdoc -> bg [0] ); // код вводимого символа pDC -> TextOut (10, 60, a ); if (pdoc -> ah ) // <Enter> { a.Format ("%i %i %i", pdoc -> aa, pdoc -> ab, pdoc -> ac ); pDC -> TextOut (10, 85, a ); pDC -> TextOut (10, 125, pdoc -> bd [0] ); pDC -> TextOut (10, 150, pdoc -> bd [1] ); a.Format ("3. %i! = %i.", pdoc -> aa, pdoc -> bg [1] ); pDC -> TextOut (10, 175, a ); a.Format ("4. НОД (%i, %i ) = %i.", pdoc -> ad, pdoc -> ae, pdoc -> bg [2] ); pDC -> TextOut (10, 200, a ); pDC -> TextOut (10, 225, pdoc -> bd [2] ); a.Format ("6. %i * %i = %i, %i / %i = %i, %i %% %i = %i.", pdoc -> ad, pdoc -> ae, pdoc -> bg [3], pdoc -> ad, pdoc -> ae, pdoc -> bg [4], pdoc -> ad, pdoc -> ae, pdoc -> bg [5] ); pDC -> TextOut (10, 250, a ); a.Format ("7. НОД (%i, %i, %i ) = %i.", pdoc -> ad, pdoc -> ae, pdoc -> af, pdoc -> bg [6] ); pDC -> TextOut (10, 275, a ); a.Format ("8. max (%i, %i, %i ) = %i.", pdoc -> aa, pdoc -> ab, pdoc -> ac, pdoc -> bg [7] ); pDC -> TextOut (10, 300, a ); a.Format ("9. Число сотен равно %i.", pdoc -> bg [8] ); pDC -> TextOut (10, 325, a ); a.Format ("10. Сумма цифр трёхзначного числа %i.", pdoc -> bg [9] ); pDC -> TextOut (10, 350, a ); a.Format ("11. Площадь треугольника %.4g.", pdoc -> bj [0] ); pDC -> TextOut (310, 125, a ); a.Format ("12. Сумма гармонического ряда %.6g.", pdoc -> bj [1] ); pDC -> TextOut (310, 175, a ); a.Format ("13. Сумма чисел от %i до %i равна %i.", pdoc -> aa, pdoc -> ab, pdoc -> bg [10] ); pDC -> TextOut (310, 200, a ); a.Format ("14. Величина машинного epsilon %.6g.", pdoc -> bj [2] ); pDC -> TextOut (310, 275, a ); a.Format ("15. НОД (%i, %i, %i ) = %i.", pdoc -> bg [11], pdoc -> bg [12], pdoc -> bg [13], pdoc -> bg [14] ); pDC -> TextOut (310, 300, a ); pDC -> TextOut (310, 325, pdoc -> bd [3] ); } } void CP11View::OnChar (UINT nChar, UINT nRepCnt, UINT nFlags ) { CP11Doc *pdoc = GetDocument ( ); ASSERT_VALID (pdoc ); pdoc -> bg [0] = nChar; if (nChar == 8 ) // Обработка <Backspace> { if (pdoc -> ag ) {pdoc -> ag--; pdoc -> ba [pdoc -> ag] = 0;} goto aaa; } if (nChar == 13 ) // Обработка <Enter> { pdoc -> ca ( ); goto aaa; } if (pdoc -> ag < 49 ) // Ограничение на длину вводимой строки { pdoc -> ba [pdoc -> ag] = nChar; // Добавление символа к массиву строки pdoc -> ba [pdoc -> ag + 1] = 0; pdoc -> ag++; } aaa: Invalidate ( ); CView::OnChar (nChar, nRepCnt, nFlags ); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 16 января, 2020 Автор Жалоба Поделиться Опубликовано 16 января, 2020 (изменено) Основы программирования на C в задачах. /* p1 - 11 Язык Turbo C 2.0 Основы программирования - 1 Ввод данных: 6 int, 1 int + 1 float a - простые переменные j - ввод данных s () - функции 1 - 15k, 2 - 21k, 3 - 23k */ #include <conio.h> #include <math.h> #include <stdio.h> float s (float, float, float, float); /* расстояние между двумя точками на плоскости */ float t (float, float, float); /* формула Герона */ main () { int a, b; float d; int j, k, l, m, n, o; /* ввод данных */ float p; printf ("? (1-2) "); scanf ("%i", &a); if (a == 1) goto aaa; /* 6 int */ if (a == 2) goto aab; /* 1 int + 1 float */ printf ("\n"); return; aaa: printf ("Введите 6 целых чисел: "); scanf ("%i%i%i%i%i%i", &j, &k, &l, &m, &n, &o); /* 11.1.1.1. */ a = j * m; b = k * l; printf ("1. %i / %i.\n", a, B); /* 21.1.8.3. Даны декартовы координаты трех вершин треугольника на плоскости. Составить алгоритм определения площади треугольника. */ d = t (s (j, k, l, m), s (j, k, n, o), s (l, m, n, o)); /* формула Герона */ printf ("3. Площадь треугольника %.4g.\n", d); /* 80.2.28.4. По координатам вершин треугольника вычислить его периметр, используя подпрограмму вычисления длины отрезка, соединяющего две точки. */ d = s (j, k, l, m) + s (j, k, n, o) + s (l, m, n, o); printf ("4. Периметр треугольника %.4g.\n", d); goto aaz; aab: printf ("Введите целое число: "); scanf ("%i", &j); printf ("Введите рациональное число: "); scanf ("%f", &p); /* 19.1.7.2. Составить алгоритм вычисления степенной функции с целым показателем y = x^k, где k - целое число, x != 0. */ if (p == 0) d = 0; else if (j == 0) d = 1; else { a = j; if (a < 0) a = -a; d = p; for (b = 1; b < a; b++) { d *= p; if (d > 1e10) break; } if (d != 0 && j < 0) d = 1 / d; } printf ("2. %.4g ^ %i = %.4g.\n", p, j, d); /* 85.5.34.5. Для заданного натурального N и вещественного x (x > 0) вычислить значение выражения: sqrt (x + sqrt (x + ... + sqrt (x)...)). */ d = 0; if (p > 0) for (a = 0; a < j && a < 100; a++) d = sqrt (p + d); printf ("5. %g.\n", d); aaz: getch (); printf ("\n"); } float s (float a, float b, float c, float d) /* расстояние между двумя точками на плоскости */ { return sqrt ((c - a) * (c - a) + (d - B) * (d - B)); } float t (float a, float b, float c) /* формула Герона */ { float d; if (a < 0 || b < 0 || c < 0 || a + b < c || a + c < b || b + c < a) return 0; d = (a + b + c) / 2; return sqrt (d * (d - a) * (d - B) * (d - c)); } Изменено 17 января, 2020 пользователем 初音ミクこんばんは (смотреть историю редактирования) Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 17 января, 2020 Автор Жалоба Поделиться Опубликовано 17 января, 2020 Продолжение. Вторая часть. /* 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);} Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 18 января, 2020 Автор Жалоба Поделиться Опубликовано 18 января, 2020 Третья часть того же самого. /* p3 - 21 Язык Turbo C 2.0 Основы программирования - 3 Ввод данных: нет ввода, 2 float a, s - простые переменные j - ввод данных 1 - 21k, 2 - 22k, 4 - 23k, 10 - 24k */ #include <conio.h> #include <math.h> #include <stdio.h> main () { int a, b, c, g; float d, e; double s; float j, k; /* ввод данных */ printf ("? (1-2) "); scanf ("%i", &a); if (a == 1) goto aaa; /* нет ввода */ if (a == 2) goto aab; /* 2 float */ printf ("\n"); return; aaa: /* 67.1.17.3. Получить на экране десятичные коды букв латинского алфавита. */ printf ("3.\n"); for (a = 'a'; a <= 'z'; a++) printf ("%c - %-6i", a, a); /* 68.7.20.6. Напечатать в возрастающем порядке все трехзначные числа, в десятичной записи которых нет одинаковых цифр. */ printf ("\n\n6. "); for (a = 1; a < 10; a++) for (b = 0; b < 10; b++) for (c = 0; c < 10; c++) if (a != b && a != c && b != c) printf ("%i%i%i ", a, b, c); /* 70.1.22.7. С помощью приведенной программы определите на вашем компьютере величину машинного epsilon. */ d = 1; while (1 < 1 + d) d /= 2; printf ("\n\n7. Машинный эпсилон %.4g.\n", d); /* 70.2.23.8. Если на вашем компьютере это возможно, определите машинное epsilon для удвоенной или повышенной точности представления вещественных чисел. */ s = 1; while (1 < 1 + s) s /= 2; printf ("8. Машинный эпсилон %.4g.\n", s); /* 70.3.24.9. Составьте программу определения машинного нуля. Проведите численный эксперимент на вашем компьютере. */ d = 1; while (d > 0) {e = d; d /= 2;} printf ("9. Машинный нуль %.4g.\n", e); /* 71.6.25.10. Проведите эксперимент на исследование целочисленного переполнения, т. е. установите, что происходит с целой переменной, когда ее значение превышает maxint. */ printf ("10. "); a = 32766; for (b = 0; b < 4; b++) {printf ("%i ", a); a++;} printf ("\n"); goto aaz; aab: printf ("Введите два рациональных числа: "); scanf ("%f%f", &j, &k); /* 21.2.9.1. Дана скорость ракеты при выходе за пределы атмосферы Земли. Составить алгоритм определения того, как будет двигаться ракета после выключения двигателей. (Напомним величины трех космических скоростей: 7.5 км/с, 11.2 км/с, 16.4 км/с.) */ printf ("1. Ракета "); if (j < 7.5) printf ("упадет на Землю.\n"); else if (j == 7.5) printf ("будет двигаться по окружности вокруг Земли.\n"); else if (j < 11.2) printf ("будет двигаться по эллипсу вокруг Земли.\n"); else if (j == 11.2) printf ("улетит от Земли по параболе.\n"); else if (j < 16.4) printf ("будет двигаться по эллипсу вокруг Солнца.\n"); else if (j == 16.4) printf ("улетит от Солнца по параболе.\n"); else printf ("улетит от Солнца по гиперболе.\n"); /* 64.2.15.2. Вычислить сумму конечного числа членов гармонического ряда: 1 + 1 / 2 + 1 / 3 + ... + 1 / i + ... . Суммирование прекращается, когда очередное слагаемое становится меньше epsilon или целая переменная i достигает значения maxint. */ a = 32767; if (j > 0) if (1 / j < a) a = 1 / j; d = 0; while (a) {d += 1. / a; a--;} printf ("2. Сумма гармонического ряда %g.\n", d); /* 68.4.18.4. Вычислить сумму квадратов всех целых чисел, попадающих в интервал (ln x, exp x). */ a = 0; if (j > 0 && j < 10.1) { b = log (j); c = exp (j); for (g = b; g <= c; g++) a += g * g; } printf ("4. Сумма ряда %i.\n", a); /* 68.5.19.5. Вычислить количество точек с целочисленными координатами, попадающих в круг радиуса R (R > 0) с центром в начале координат. */ a = 0; if (j < 100.2) for (b = -j; b <= j; b++) for (c = -j; c <= j; c++) if (b * b + c * c <= j * j) a++; printf ("5. Количество точек %i.\n", a); /* 84.4.33.11. Для заданного вещественного x и малой величины epsilon (например, epsilon = .000001) вычислить сумму ряда: 1 + x + x^2 / 2! + x^3 / 3! + ..., включив в нее только слагаемые, превышающие epsilon. */ a = 0; /* номер итерации */ d = 0; /* сумма последовательности */ e = 1; /* очередной член ряда */ while (1) { if (e < k || e < 1e-10) break; if (e < -1e10 || e > 1e10) break; d += e; a++; e *= j / a; } printf ("11. Сумма ряда %g.\n", d); aaz: getch (); printf ("\n"); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 18 января, 2020 Автор Жалоба Поделиться Опубликовано 18 января, 2020 Четвертая часть. /* p4 - 80 Язык Turbo C 2.0 Основы программирования - 4 Ввод данных: 3 int a - простые переменные j - ввод данных s () - функции 1 - 16k */ #include <conio.h> #include <stdio.h> s (int); /* сумма цифр */ main () { int a, b, c, d, e; int j, k, l; printf ("Введите три целых числа: "); scanf ("%i%i%i", &j, &k, &l); /* 80.3.29.1. Даны три целых числа. Определить, сумма цифр которого из них больше. Подсчет суммы цифр организовать через подпрограмму. */ a = s (j); b = s (k); c = s (l); printf ("1. "); if (a > b) if (a > c) printf ("Сумма цифр первого числа больше.\n"); else printf ("Сумма цифр третьего числа больше.\n"); else if (b > c) printf ("Сумма цифр второго числа больше.\n"); else printf ("Сумма цифр третьего числа больше.\n"); /* 82.1.30.2. Вычислить n-ый элемент арифметической прогрессии: a1 = 1, a2 = 3, a3 = 5, ... . */ a = 1; if (j > 1) a = 2 * j - 1; printf ("2. %i-ый член арифметической прогрессии %i.\n", j, a); /* 83.2.31.3. Просуммировать первые n членов геометрической прогрессии a1 = 1, a2 = 2, a3 = 4, ..., не пользуясь формулой для суммы первых n членов прогрессии. */ a = 1; b = 0; for (c = 0; c < j; c++) { b += a; a *= 2; } printf ("3. Сумма %i членов геометрической прогрессии равна %i.\n", j, b); /* 83.3.32.4. Вывести на печать первые n (n >= 3) чисел Фибоначчи. Подсчитать, сколько среди них четных чисел. */ a = 1; /* первое число Фибоначчи */ b = 1; /* второе число Фибоначчи */ c = 0; /* число четных чисел в последовательности */ printf ("\n4. "); for (d = 0; d < j; d++) { printf ("%i ", a); if (a % 2 == 0) c++; e = a + b; a = b; b = e; } printf ("\nЧисло четных чисел в последовательности - %i.\n", c); getch (); printf ("\n"); } s (int a) /* сумма цифр */ { int b = 0; while (a) { b += a % 10; a /= 10; } if (b < 0) b = -b; return b; } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Напротив Опубликовано 18 января, 2020 Жалоба Поделиться Опубликовано 18 января, 2020 иероглиф-кун, прости, а что ты вообще такое показываешь нам?это перепечатки из книжки какой-то или что? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 19 января, 2020 Автор Жалоба Поделиться Опубликовано 19 января, 2020 Я взял учебник программирования и стал реализовывать примеры, которые там написаны. Там много маленьких учебных программ, я слил их в одну большую. Переделал имена переменных в единый формат. И, конечно, оттестировал получившиеся программы.Мне удобнее читать так, чем то, что написано в учебнике. Это сборник решений задач из учебника программирования. Решал я сам, задачи из учебника. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 25 января, 2020 Автор Жалоба Поделиться Опубликовано 25 января, 2020 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 30 января, 2020 Автор Жалоба Поделиться Опубликовано 30 января, 2020 Работа с текстовым экраном. /* p52 Язык Turbo C 2.0 Текст 1 - 12k, 2 - 13k */ #include <conio.h> #include <stdio.h> main () { int a, b; char d [] = "Это строка "; char e [288]; /* p54 - 1 */ clrscr (); gotoxy (40, 13); putch ('*'); getch (); /* п-1 */ /* p54 - 2 */ window (1, 1, 40, 12); textbackground (WHITE); clrscr (); window (41, 1, 80, 12); textbackground (RED); clrscr (); window (1, 13, 40, 25); textbackground (LIGHTRED); clrscr (); window (41, 13, 80, 25); textbackground (GREEN); clrscr (); getch (); /* п-2 */ /* p55 - 3 */ textbackground (WHITE); gotoxy (1, 12); for (a = 0; a < 15; a++) { textcolor (a); printf ("%-4i", a); } getch (); /* п-3 */ /* p150 - 4 */ window (1, 1, 80, 25); clrscr (); getch (); for (a = BLUE; a <= WHITE; a++) { for (b = BLACK; b <= LIGHTGRAY; b++) { textcolor (a); textbackground (b); cprintf ("тест"); } cprintf ("\n"); } textcolor (WHITE|BLINK); textbackground (BLACK); cprintf ("конец теста"); getch (); /* п-4 */ /* p152 - 5 */ window (5, 5, 20, 10); textattr ((GREEN << 4) + RED); clrscr (); getch (); /* п-5 */ cputs ("\nПривет, мир\n\n\r"); textattr ((GREEN << 4) + RED + BLINK); cputs ("Нажмите любую клавишу"); getch (); /* п-6 */ window (1, 1, 80, 25); gettext (4, 4, 21, 11, e); textbackground (BLUE); textcolor (WHITE); clrscr (); getch (); for (a = 1; a < 23; a++) { gotoxy (1, a); cputs (d); cputs (d); cputs (d); cputs (d); } getch (); /* п-7 */ puttext (24, 5, 41, 12, e); getch (); /* п-8 */ for (a = 1; a < 5; a++) movetext (22, 4, 32, 8, 10 * a, 17); getch (); /* п-9 */ /* Exit */ window (1, 1, 80, 25); textbackground (BLACK); textcolor (LIGHTGRAY); clrscr (); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 30 января, 2020 Автор Жалоба Поделиться Опубликовано 30 января, 2020 Решение задач на последовательности. /* p87 Язык Turbo C 2.0 Основы программирования a - простые переменные j - ввод данных 1 - 22k, 4 - 23k */ #include <conio.h> #include <math.h> #include <stdio.h> main () { int a; float d, e, f, g; int j; /* ввод данных */ float m, n, o; printf ("? (1-4) "); scanf ("%i", &a); if (a == 1) goto aaa; /* нет ввода */ if (a == 2) goto aab; /* ввод данных (1 int) */ if (a == 3) goto aac; /* ввод данных (3 float) */ if (a == 4) goto aad; /* ввод данных (1 int + 1 float) */ printf ("\n"); return; aaa: /* 87.6.1.1. В ходе лечебного голодания масса пациента за 30 дней снизилась с 96 до 70 кг. Было установлено, что ежедневные потери массы пропорциональны массе тела. Вычислить, чему была равна масса пациента через k дней после начала голодания для k = 1, 2, ..., 29. */ printf ("1.\n"); d = exp (1. / 30 * log (70. / 96)); e = 96; for (a = 0; a < 31; a++) { printf ("%i - %.4g\t", a, e); e *= d; } /* 88.2.3.3. Дана последовательность: ai = 1, если i = 0, i = 1; ai = a(i-2) + a(i-1) / (i - 1), если i > 1. Вычислить произведение элементов с 1-го по 20-й. */ printf ("\n\n3.\n"); d = e = f = g = 1; for (a = 0; a < 21; a++) { if (a > 1) { f = d + e / (a - 1); g *= f; /* произведение */ d = e; e = f; } printf ("%i - %.4g ", a, e); } printf ("\nПроизведение последовательности равно %.4g.\n", g); /* 88.5.6.6. Вычислить и вывести все члены числового ряда 1; 1 / 2!; 1 / 3!; ...; 1 / N!; превышающие значение 1e-5. */ printf ("\n6. "); a = 1; d = 1; while (d > 1e-5) { printf ("%.4g ", d); a++; d /= a; } printf ("\n"); goto aaz; aab: printf ("Введите целое число: "); scanf ("%i", &j); /* 88.1.2.2. Рекуррентная последовательность определена следующим образом: ai = 1, если i = 0; ai = a(i-1) * i + 1 / i, если i > 0. Для данного натурального n получить значение an. */ printf ("2.\n"); d = 1; for (a = 0; a < j + 1 && a < 21; a++) { if (a) d = d * a + 1. / a; printf ("%i - %.4g ", a, d); } printf ("\n"); goto aaz; aac: printf ("Введите три рациональных числа: "); scanf ("%f%f%f", &m, &n, &o); /* 88.3.4.4. Используя рекуррентный подход, вычислить сумму многочлена 10-й степени по формуле Горнера, где x - данное вещественное число: 10 * x^10 + 9 * x^9 + 8 * x^8 + ... + 2 * x^2 + x = = ((...((10 * x + 9) * x + 8) * x + ... + 2) * x + 1) * x. */ d = 0; if (m > -10.1 && m < 10.1) for (a = 10; a > 0; a--) d = (d + a) * m; printf ("4. Сумма многочлена равна %.4g.\n", d); /* 88.6.7.7. Функцию y = sqrt (x) можно вычислить как предельное значение последовательности, определяемой рекуррентной формулой: yk = 1 / 2 * (y(k-1) + x / y(k-1)); k = 1, 2, ... . Начальное значение y0 задается произвольно (желательно ближе к sqrt (x)). За приближенное значение корня с точностью epsilon берется первое yk, для которого выполняется условие: abs (yk - y(k-1)) < epsilon. Составить программу. */ d = n; /* начальное значение y0 */ while (1) { if (!d) break; e = (d + m / d) / 2; if (fabs (e - d) < o) break; if (o <= 0) break; /* значение epsilon */ d = e; } printf ("7. sqrt (%.4g) = %.4g.\n", m, d); goto aaz; aad: printf ("Введите целое число: "); scanf ("%i", &j); printf ("Введите рациональное число: "); scanf ("%f", &m); /* 88.4.5.5. Для данного вещественного x и натурального N вычислить цепную дробь: x / (1 + x / (2 + x / (3 + x / (... / (N + x)...)))). */ d = 1; for (a = j; a > -1; a--) { if (!d) break; d = a + m / d; } printf ("5. %.4g.\n", d); aaz: getch (); printf ("\n"); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
初音ミクこんばんは Опубликовано 31 января, 2020 Автор Жалоба Поделиться Опубликовано 31 января, 2020 Структуры в C /* p123 Язык Turbo C 2.0 Начальный курс C a - структуры d - объединения g - экземпляры структур j - экземпляры объединений m () - функции 1 - 12k, 3 - 13k */ #include <conio.h> #include <stdio.h> #define P 100 /* Структуры */ struct a { int a; char b; }; struct b { int a; char b; }; struct c { int a: 1; int b: 1; int c: 1; int d: 1; int e: 1; int f: 1; int g: 1; int h: 1; }; /* Объединения */ union d { char a; struct c b; }; struct a g; struct b h; union d j; m (struct a); n (union d); main () { /* p125 - 1 */ g.a = 1; g.b = 'f'; h.a = g.a; /* p126 - 2 */ printf ("2. "); g.a = 1; g.b = '2'; m (g); /* p129 - 3 */ printf ("\n3. Нажмите любую клавишу:\n"); do { j.a = getche (); printf (": "); n (j); } while (j.a != 'q'); /* p135 - 4 */ printf ("\n4. "); #if P > 99 printf ("P больше 99.\n"); #else printf ("P равно %i.\n", P); #endif /* p139 - 5 */ printf ("5. %s, %i, %s, %s.\n", __FILE__, __LINE__, __DATE__, __TIME__); printf ("Используется версия: %x Turbo C.\n", __TURBOC__); getch (); printf ("\n"); } m (struct a g) { printf ("%i, %c.\n", g.a, g.b); } n (union d j) { if (j.b.h) printf ("1"); else printf ("0"); if (j.b.g) printf ("1"); else printf ("0"); if (j.b.f) printf ("1"); else printf ("0"); if (j.b.e) printf ("1"); else printf ("0"); if (j.b.d) printf ("1"); else printf ("0"); if (j.b.c) printf ("1"); else printf ("0"); if (j.b.b) printf ("1"); else printf ("0"); if (j.b.a) printf ("1"); else printf ("0"); printf ("\n"); } Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
banraiser Опубликовано 21 января, 2021 Жалоба Поделиться Опубликовано 21 января, 2021 Чем тебе интересно ретро-программирование? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.