Перейти к содержанию
Решена проблема отправки писем ×
АнимеФорум

C и C++


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

У меня есть задачник по программированию. Ну самый обычный задачник - 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.BGI

TC BAT 12 06-26-16 10:34a TC.BAT

TCPICK TCP 1,196 07-04-16 1:10p TCPICK.TCP

TCCONFIG TC 1,690 06-26-16 11:03a TCCONFIG.TC

P77 BAK 2,552 07-04-16 1:01p P77.BAK

P77 C 2,720 07-04-16 1:05p P77.C

DONE-1 <DIR> 06-30-16 9:49a DONE-1

P77A C 861 07-01-16 7:40a P77A.C

P77B C 1,800 07-02-16 6:25p P77B.C

P77 OBJ 1,974 07-04-16 1:05p P77.OBJ

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

 

Изменено пользователем MrStitch (смотреть историю редактирования)
Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...
  • Ответов 91
  • Создана
  • Последний ответ

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

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

 

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. И на любом из них можно написать что угодно.

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

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

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

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

 

Дано:

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

  • 1 год спустя...

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

Ссылка на комментарий
Поделиться на другие сайты

  • 2 года спустя...

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

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

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

 

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

Ссылка на комментарий
Поделиться на другие сайты

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

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

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

 

 

 

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

Ссылка на комментарий
Поделиться на другие сайты

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

Ссылка на комментарий
Поделиться на другие сайты

  • 11 месяцев спустя...

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

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

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

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

Загрузка...
×
×
  • Создать...

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