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

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

Запись от Nikolay K размещена 28.01.2020 в 17:03
Показов 1876 Комментарии 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 вне форума
 
Новые блоги и статьи
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru