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

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

Запись от Nikolay K размещена 28.01.2020 в 17:03
Показов 1677 Комментарии 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 Кб, 1612 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 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 вне форума
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru