Форум программистов, компьютерный форум, киберфорум
Nikolay K
Войти
Регистрация
Восстановить пароль

Лабораторная работа № 4

Запись от Nikolay K размещена 28.01.2020 в 17:03
Показов 1905 Комментарии 2

Лабораторная работа: 4.
Тема: Операторы цикла и передачи управления.
Файл: Lab04_YaP_2019_1S.pdf

Обратите внимание: В файлах Source.cpp, Source.cs и *.pas помимо прочего, так же имеются примечания к программам с различными комментариями и пояснениями.
При оформлении программ в сети Интернет я их удаляю, чтобы не нагромождать эти программы и тем самым не затруднять их восприятие.


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
Составить алгоритм для расчета функции Y при X E [0..15]:
1. X^3 - 3 * X, при X <= 1 и DX = 0.2.
2. (X - 3)^3 / X, при X > 1 и DX = 0.5.

ЛР № 4, задание № 5.1.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/*
 *Лабораторная работа: 4.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 5.1. Оператор цикла for.
 *Файл: Lab04_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 04.10.2019.
 *Задание: 13. Составить алгоритм для расчета функции Y при X E [0..15]:
 *1. X^3 - 3 * X, при X <= 1 и DX = 0.2.
 *2. (X - 3)^3 / X, при X > 1 и DX = 0.5.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, POW, COUT, SYSTEM. //
 
using namespace std;
 
void main () {
     setlocale (LC_ALL, "Russian");
     float X = 0;
     printf ("1. Введите число X (от 0 до 15, влючительно): ");
     cin >> X;
     if ((X < 0) || (X > 15)) {
          printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
          system ("pause");
          exit (true);
     }
     if ((X >= 0) && (X <= 1)) {
          printf ("\n2. Поскольку X E [0..1], то Y = X^3 - 3 * X, при DX = 0.2:\n\n");
          for (float i = 0; i <= 15; i += 0.2) {
               printf ("%.0f) Y = %.1f^3 - 3 * %.1f = %.3f.\n", i * 5 + 1, i, i, pow (i, 3) - 3 * i);
          }
     }
     else {
          printf ("\n2. Поскольку X E (1..15], то Y = (X - 3)^3 / X, при DX = 0.5:\n\n");
          for (float i = 0.5; i <= 15; i += 0.5) {                   // I = 0.5, потому что деление на нуль запрещено. //
               printf ("%.0f) Y = (%.1f - 3)^3 / %.1f = %.3f.\n", i * 2, i, i, pow (i - 3, 3) / i);
          }
     }
     cout << endl;
     system ("pause");
}


Язык: Pascal.
Среда: PascalABC.NET v3.5.1.
Платформа: отсутствует.

Задание:
Составить алгоритм для расчета функции Y при X E [0..15]:
1. X^3 - 3 * X, при X <= 1 и DX = 0.2.
2. (X - 3)^3 / X, при X > 1 и DX = 0.5.

Примечание:
Задание аналогично предыдущему, но написано на другом языке программирования.

ЛР № 4, задание № 5.1.pas
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 04.10.2019.
 *Задание: 13. Составить алгоритм для расчета функции Y при X E [0..15]:
 *1. X^3 - 3 * X, при X <= 1 и DX = 0.2.
 *2. (X - 3)^3 / X, при X > 1 и DX = 0.5.
 *}
 
var
     i, X: integer;
     Temporary: real;
     ExitVariable: char;
 
begin
     i := 0;
     X := 0;
     Temporary := 0;
     write ('1. Введите целое число X (от 0 до 15, влючительно): ');
     readln (X);
     writeln;
     if ((X < 0) or (X > 15)) then begin
          writeln ('Ошибка ввода. Программа завершает свою работу.');
          writeln;
          write ('Для продолжения нажмите любую клавишу . . . ');
          readln (ExitVariable);
          halt
     end;
     if ((X >= 0) and (X <= 1)) then begin
          writeln ('2. Поскольку X E [0..1], значит Y = X^3 - 3 * X, при DX = 0.2:');
          writeln;
          for i := 0 to 75 do begin
               writeln (i + 1, ') Y = ', Temporary, '^3 - 3 * ', Temporary, ' = ', ((sqr (Temporary) * Temporary) - 3 * Temporary):0:3,
                    '.');
               Temporary := Temporary + 0.2
          end
     end
     else begin
          writeln ('2. Поскольку X E (1..15], то Y = (X - 3)^3 / X, при DX = 0.5:');
          writeln;
          for i := 0 to 29 do begin
               Temporary := Temporary + 0.5;                    // TEMPORARY = 0.5, потому что деление на нуль запрещено. //
               writeln (i + 1, ') Y = (', Temporary, ' - 3)^3 / ', Temporary, ' = ', ((sqr (Temporary - 3) * (Temporary - 3)) /
                    Temporary):0:3, '.');
          end
     end;
     writeln;
     write ('Для продолжения нажмите любую клавишу . . . ');
     readln (ExitVariable)
end.


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
Найти сумму ряда с точностью Е, общий член которого равен A (N) = (-1)^(N - 1) / N^N. Точность считается достигнутой, если следующий член последовательности меньше заданного Е.
Задание необходимо выполнить в двух вариантах (используя два вида циклов).

Примечание:
Ради увеличения функциональности программы, оба варианта циклов WHILE и DO..WHILE объединил в одной программе. Правильнее было бы написать две разных программы.

ЛР № 4, задание № 5.2.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/*
 *Лабораторная работа: 4.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 5.2 Оператор цикла с предусловием (while) и с постусловием (do..while).
 *Файл: Lab04_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 04.10.2019.
 *Задание: 3. Найти сумму ряда с точностью Е, общий член которого равен A (N) = (-1)^(N - 1) / N^N. Точность считается достигнутой, если
 *     следующий член последовательности меньше заданного Е.
 *Задание необходимо выполнить в двух вариантах (используя два вида циклов).
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, ABS, POW, SYSTEM, EXIT. //
 
using namespace std;
 
void main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0, N = 0;
     float An = 1, Epsilon = 0, Sum = 0;                             // AN = 1 , чтобы WHILE срабатывал на первой итерации. //
     printf ("1. Введите число Epsilon: ");
     cin >> Epsilon;
     printf ("\n2. Какой оператор вы хотите применить?\n\n1) WHILE.............................1\n2) DO..WHILE.........................2"
          "\n\nВаш выбор: ");
     cin >> Choice;
     switch (Choice) {
          case 1: {
               while (abs (An) >= Epsilon) {
                    An = pow (-1, N - 1) / pow (N, N);
                    printf ("\n%d) A (%d) = (-1)^(%d - 1)) / %d^%d = %.5f.", N + 1, N, N, N, N, An);
                    Sum += An;
                    N++;
               }
          } break;
          case 2: {
               do {
                    An = pow (-1, N - 1) / pow (N, N);
                    printf ("\n%d) A (%d) = (-1)^(%d - 1)) / %d^%d = %.5f.", N + 1, N, N, N, N, An);
                    Sum += An;
                    N++;
               } while (abs (An) >= Epsilon);
          } break;
          default: {
               printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
               system ("pause");
               exit (true);
          } break;
     }
     printf ("\n\n3. Сумма ряда с точностью Epsilon = %f, равна %.3f.\n\n", Epsilon, Sum);
     system ("pause");
}


Язык: C Sharp.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: Any CPU.

Задание:
Выведите на экран таблицу значений синуса от 0 до 2 * PI. В каждой строке должны стоять один аргумент и одно значение. Количество значений аргумента пусть задает пользователь.

ЛР № 4, задание № 6.1.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
/*
 *Лабораторная работа: 4.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 6.1. Оператор цикла for.
 *Файл: Lab04_YaP_2019_1S.pdf
 *
 *Язык: C Sharp.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: Any CPU.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 04.10.2019.
 *Задание: 3. Выведите на экран таблицу значений синуса от 0 до 2 * PI. В каждой строке должны стоять один аргумент и одно значение.
 *     Количество значений аргумента пусть задает пользователь.
 */
 
using System;
 
namespace Program {
 
class Program {
 
static void Main () {
     int Number = 0;
     double Degrees = 0, StepDegrees = 0, Radian = 0, StepRadian = 0;
     Console.Write ("1. Введите количество аргументов: ");
     Number = Convert.ToInt32 (Console.ReadLine ());
     Degrees = 360 / Number;                                         // Вычисление угла аргумента. //
     StepDegrees = Degrees;                                          // Вычисление шага аргумента. //
     Radian = (Math.PI * Degrees) / 180;                             // Перевод радиуса в радианы. //
     StepRadian = Radian;                                            // Вычисление шага радиан. //
     for (int i = 0; i < Number; i++) {
          Console.Write ("\n{0:d}) SIN ({1,3:f0}) = {2,6:f3}.", i + 1, StepDegrees, Math.Sin (StepRadian));
          StepDegrees += Degrees;
          StepRadian += Radian;
     }
     Console.Write ("\n\nДля продолжения нажмите любую клавишу . . . ");
     Console.ReadKey ();
}
}
}


Язык: C Sharp.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: Any CPU.

Задание:
Вычислите золотое сечение по формуле 1 + (1 / (1 + 1 / (1 + 1 / (...)))). Сделайте 20 итераций. В каком знаке будут наблюдаться изменения, если сделать 30 итераций?

Примечание:
Тождественно предыдущему заданию: программу следовало разделить на две, с разными циклами WHILE и DO..WHILE, но я их объединил ради функциональности.

ЛР № 4, задание № 6.2.cs
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 *Лабораторная работа: 4.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 6.2. Оператор цикла с предусловием (while) и с постусловием (do while).
 *Файл: Lab04_YaP_2019_1S.pdf
 *
 *Язык: C Sharp.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: Any CPU.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 04.10.2019.
 *Задание: 6. Вычислите золотое сечение по формуле 1 + (1 / (1 + 1 / (1 + 1 / (...)))). Сделайте 20 итераций. В каком знаке будут
 *     наблюдаться изменения, если сделать 30 итераций?
 *
 *Примечание:
 *1. Числа Фибоначчи (золотое сечение): 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711...
 *2. Последовательность Фибоначчи стремиться к своему LIM -> 1.62. На 30 итерации изменения перестают наблюдаться в знаке 1 * E^23 (после этого знака выводятся на экран нули. Очевидно, что дело в DOUBLE).
 */
 
using System;
 
namespace Program {
 
class Program {
 
static void Main () {
     int i = 0, Choice;
     float Number = 1, PreviousNumber = 0;
     Console.Write ("1. Какой оператор вы хотите применить?\n\n1) WHILE.............................1\n2) DO..WHILE...................." +
          ".....2\n\nВаш выбор: ");
     Choice = Convert.ToInt32 (Console.ReadLine ());
     switch (Choice) {
          case 1: {
               while (i < 20) {
                    PreviousNumber = Number;
                    Number = 1 + 1 / Number;
                    Console.Write ("\n{0:d}) 1 + (1 / {1:f3}) = {2:f3}.", i + 1, PreviousNumber, Number);
                    i++;
               }
          } break;
          case 2: {
               do {
                    PreviousNumber = Number;
                    Number = 1 + 1 / Number;
                    Console.Write ("\n{0:d}) 1 + (1 / {1:f3}) = {2:f3}.", i + 1, PreviousNumber, Number);
                    i++;
               } while (i < 20);
          } break;
          default: {
               Console.Write ("\nОшибка ввода. Программа завершает свою работу.");
          } break;
     }
     Console.Write ("\n\nДля продолжения нажмите любую клавишу . . . ");
     Console.ReadKey ();
}
}
}
Вложения
Тип файла: rar 04.10.2019 - ЛР 4.rar (469.3 Кб, 1628 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 2
Комментарии
  1. Старый комментарий
    Аватар для bormant
    Несколько существенных и косметических замечаний по 5.2.pas:
    0) приведенный код является решением какого-то другого задания, но не приведенного выше.
    Нужно было посчитать Y для X:=0, 0.2, 0.4, ... 1 по (1) и для X:=1.5, 2.0, 2.5, ... 15 по (2).

    Соответственно:
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    function y(x: Real): Real;
    begin
      if x>1 then y:=Sqr(x-3)*(x-3)/x else y:=Sqr(x)*x-3*x;
    end;
    const W=7; D=3;
    var x: Integer;
    begin
      Write('X'); for x:=0 to 5 do Write(x/5:W+1:1);      for x:=3 to 5 do Write(x/2:W+1:1); WriteLn;
      Write('Y'); for x:=0 to 5 do Write(' ',y(x/5):W:D); for x:=3 to 5 do Write(' ',y(x/2):W:D);WriteLn;  WriteLn;
      Write('X'); for x:=6 to 14 do Write(x/2:W+1:1); WriteLn;
      Write('Y'); for x:=6 to 14 do Write(' ',y(x/2):W:D); WriteLn; WriteLn;
      Write('X'); for x:=15 to 23 do Write(x/2:W+1:1); WriteLn;
      Write('Y'); for x:=15 to 23 do Write(' ',y(x/2):W:D); WriteLn; WriteLn;
      Write('X'); for x:=24 to 30 do Write(x/2:W+1:1); WriteLn;
      Write('Y'); for x:=24 to 30 do Write(' ',y(x/2):W:D); WriteLn;
    end.
    Прогон:
    Code
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    X     0.0     0.2     0.4     0.6     0.8     1.0     1.5     2.0     2.5
    Y   0.000  -0.592  -1.136  -1.584  -1.888  -2.000  -2.250  -0.500  -0.050
     
    X     3.0     3.5     4.0     4.5     5.0     5.5     6.0     6.5     7.0
    Y   0.000   0.036   0.250   0.750   1.600   2.841   4.500   6.596   9.143
     
    X     7.5     8.0     8.5     9.0     9.5    10.0    10.5    11.0    11.5
    Y  12.150  15.625  19.574  24.000  28.908  34.300  40.179  46.545  53.402
     
    X    12.0    12.5    13.0    13.5    14.0    14.5    15.0
    Y  60.750  68.590  76.923  85.750  95.071 104.888 115.200
    Запись от bormant размещена 29.01.2020 в 00:32 bormant вне форума
  2. Старый комментарий
    Аватар для bormant
    Или еще лучше, так:
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function y(x: Real): Real;
    begin
      if x>1 then y:=Sqr(x-3)*(x-3)/x else y:=Sqr(x)*x-3*x;
    end;
    const W=16; D=4;
    var x: Integer;
    begin
      WriteLn('X':W,'Y':W,'X':W,'Y':W);
      for x:=0 to 5 do WriteLn(x/5:W:1,y(x/5):W:D,(x+14)/2:W:1,y((x+14)/2):W:D);
      for x:=3 to 13 do WriteLn(x/2:W:1,y(x/2):W:D,(x+17)/2:W:1,y((x+17)/2):W:D);
    end.
    Прогон:
    Code
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
                   X               Y               X               Y
                 0.0          0.0000             7.0          9.1429
                 0.2         -0.5920             7.5         12.1500
                 0.4         -1.1360             8.0         15.6250
                 0.6         -1.5840             8.5         19.5735
                 0.8         -1.8880             9.0         24.0000
                 1.0         -2.0000             9.5         28.9079
                 1.5         -2.2500            10.0         28.9079
                 2.0         -0.5000            10.5         34.3000
                 2.5         -0.0500            11.0         40.1786
                 3.0          0.0000            11.5         46.5455
                 3.5          0.0357            12.0         53.4022
                 4.0          0.2500            12.5         60.7500
                 4.5          0.7500            13.0         68.5900
                 5.0          1.6000            13.5         76.9231
                 5.5          2.8409            14.0         85.7500
                 6.0          4.5000            14.5         95.0714
                 6.5          6.5962            15.0        104.8879
    Запись от bormant размещена 29.01.2020 в 00:45 bormant вне форума
 
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru