Перейти к содержанию
Обновление форума
Опубликовано
comment_2956854

Тема для обсуждения программ на языке C.

 

---------------------------------------------------

 

Для рисования окружностей в теме Heroes III нужна программа.

http://amvnews.ru/forum/viewtopic.php?t=3888

Эта программа рассчитывает границу 1/8 окружности заданного радиуса в целых числах. Вот эта программа.

 

http://sa.uploads.ru/t/9hxWu.jpg

 

Скачать:

https://yadi.sk/d/jzUo02Szcaw6g

В архиве:

 

текст программы;

сама программа (работающая!);

итоговый файл данных;

скриншот программы;

откорректированный выходной файл (с косметическими изменениями для удобства работы с ним).

 

Программа написана на языке C под DOS.

Изменено пользователем MrStitch (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • Ответов 91
  • Просмотры 27,6 тыс
  • Создана
  • Последний ответ

Топ авторов темы

Популярные посты

  • Юра К, не придуривайся и научись гуглить. Qt - это кроссплатформенный фреймворк с богатым набором библиотек. Сейчас большинство тех, кто программирует на C++, им пользуется, и при поиске работы это уч

  • Ну спрячь его и не показывай, раз не надо. Притом что на самом деле очень часто надо.   Ты программировать учишься? Ну вот и учись. Базовый синтаксис языка освоить -- это даже не полдела, с этим медв

  • Серьёзная проблема программистов в том, что многие из них считают себя достаточно умными, чтобы программировать. Они ошибаются. Нет для этого достаточно умных. Именно поэтому разрабатывают новые техно

Рекомендуемые сообщения

Опубликовано
  • Автор
comment_3050298

Список доступных мне языков программирования:

 

Turbo C 2.0: C

Turbo C 2.0: C со структурами

Borland C++ 3.1: С

Borland C++ 3.1: C со структурами

Borland C++ 3.1: С с классами

Visual Basic 5.0

Visual C++ 6.0

Visual C++ 7.0

 

Целых 8. И на любом из них можно написать что угодно.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3050607

Очередной задачник по программированию. Задача:

 

В написанном выражении

((((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.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 1 месяц спустя...
Опубликовано
  • Автор
comment_3054964

Арифметика длинных целых чисел.

 

Дано:

9 500 000 000 000 000 000 000 000

1 983 000 000 000 000 000 000 000 000 000 000

Перемножить.

 

Вот что выдаёт программа:

9 500 000 000 000 000 000 000 000

1 983 000 000 000 000 000 000 000 000 000 000

18 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");
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3055699

Всё то же самое, но другим макаром.

 

/*   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--;
  }
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 1 год спустя...
Опубликовано
  • Автор
comment_3095607

/*   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 );
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 2 года спустя...
Опубликовано
  • Автор
comment_3135371

Основы программирования на 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));
}

Изменено пользователем 初音ミクこんばんは (смотреть историю редактирования)

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3135465

Продолжение. Вторая часть.

 

 

 

/*   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);}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3135540

Третья часть того же самого.

 

 

 

/*   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");
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3135563

Четвертая часть.

 

 

 

/*   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;
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
comment_3135635

иероглиф-кун, прости, а что ты вообще такое показываешь нам?

это перепечатки из книжки какой-то или что?

solemn voice, unyielding lips

Опубликовано
  • Автор
comment_3135651

Я взял учебник программирования и стал реализовывать примеры, которые там написаны. Там много маленьких учебных программ, я слил их в одну большую. Переделал имена переменных в единый формат. И, конечно, оттестировал получившиеся программы.

Мне удобнее читать так, чем то, что написано в учебнике.

 

Это сборник решений задач из учебника программирования. Решал я сам, задачи из учебника.

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3136175

Работа с текстовым экраном.

 

 

 

/*   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 ();
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3136198

Решение задач на последовательности.

 

 

 

/*   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");
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
Опубликовано
  • Автор
comment_3136222

Структуры в 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");
}

for (j = 0; j < 100; j++) a [j] = d [j] = g [j] = 0;
  • 11 месяцев спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

Последние посетители 0

  • Ни одного зарегистрированного пользователя не просматривает данную страницу

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.