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

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

Запись от Nikolay K размещена 28.01.2020 в 18:43

Лабораторная работа: 6.
Тема: Подпрограммы. Организация подпрограмм.
Файл: Lab06_YaP_2019_1S.pdf

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


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

Задание:
Вычислить сумму значений функций Z = F (SIN (X) + COS (Y), X + Y) + F (SIN (X), COS (Y)) + F ((SIN (X))^2 - 2 , A + B^2), где F (U, T):
1. U + T, если U > 1.
2. U - T, если 0 <= U <= 1.
3. T - U, если 0 < U.

ЛР № 6, задание № 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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.1. Функции, параметры функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 13. Вычислить сумму значений функций Z = F (SIN (X) + COS (Y), X + Y) + F (SIN (X), COS (Y)) + F ((SIN (X))^2 - 2 , A + B^2),
 *     где F (U, T):
 *1. U + T, если U > 1.
 *2. U - T, если 0 <= U <= 1.
 *3. T - U, если 0 < U.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, SIN, COS, POW, SYSTEM. //
 
using namespace std;
 
float WriteFunction (float U, float T) {                             // Объявление и определение WRITEFUNCTION. //
     if (U > 1) {
          return (U + T);
     }
     if ((U >= 0) && (U <= 1)) {
          return (U - T);
     }
     else {
          return (T - U);
     }
}
 
float ThirdFunction (float X, float A, float B) {                    // Объявление и определение THIRDFUNCTION. //
     return (WriteFunction (pow (sin (X), 2) - 2, A + pow (B, 2)));
}
 
float SecondFunction (float X, float Y) {                            // Объявление и определение SECONDFUNCTION. //
     return (WriteFunction (sin (X), cos (Y)));
}
 
float FirstFunction (float X, float Y) {                             // Объявление и определение FIRSTFUNCTION. //
     return (WriteFunction (sin (X) + cos (Y), X + Y));
}
 
void main () {
     setlocale (LC_ALL, "Russian");
     float A = 0, B = 0, X = 0, Y = 0;
     printf ("1. Введите переменную Х: ");
     cin >> X;
     printf ("\n2. Введите переменную Y: ");
     cin >> Y;
     printf ("\n3. Введите переменную A: ");
     cin >> A;
     printf ("\n4. Введите переменную B: ");
     cin >> B;
     printf ("\n5. Z = F (SIN (%.2f) + COS (%.2f), %.2f + %.2f) + F (SIN (%.2f), COS (%.2f)) + F ((SIN (%.2f))^2 - 2, %.2f + %.2f^2) = "
          "%.3f.\n\n", X, Y, X, Y, X, Y, X, A, B, FirstFunction (X, Y) + SecondFunction (X, Y) + ThirdFunction (X, A, B));
     system ("pause");
}


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

Задание:
Дан одномерный массив, состоящий из N целочисленных элементов:
1. Найти минимальный отрицательный элемент.
2. Вычислить произведение ненулевых элементов массива, кратных 3.

ЛР № 6, задание № 5.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
60
61
62
63
64
65
66
67
68
69
70
71
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.2. Передача массивов в функцию (одномерные массивы).
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C Sharp.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: Any CPU.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 13. Дан одномерный массив, состоящий из N целочисленных элементов:
 *1. Найти минимальный отрицательный элемент.
 *2. Вычислить произведение ненулевых элементов массива, кратных 3.
 */
 
using System;
 
namespace Program {
 
class Program {
 
static void MinElementFunction (int [] SourceArray, int Dimension) {     // Объявление и определение MINELEMENTFUNCTION. //
     int MinElement = 0, Multiplication = 1;
     MinElement = SourceArray [0];
     for (int i = 0; i < Dimension; i++) {
          if (SourceArray [i] < MinElement) {
               MinElement = SourceArray [i];
          }
          if ((SourceArray [i] % 3 == 0) && (SourceArray [i] != 0)) {
               Multiplication *= SourceArray [i];
          }
     }
     Console.Write ("\n\n3. Наименьший элемент массива: {0:d}.", MinElement);
     if (Multiplication == 1) {
          Console.Write ("\n\n4. Ненулевые, кратные трем элементы в массиве отсутствуют.");
     }
     else {
          Console.Write ("\n\n4. Произведение ненулевых, кратных трем элементов массива равно: {0:d}.", Multiplication);
     }
}
 
static void WriteArrayFunction (int [] SourceArray, int Dimension) {     // Объявление и определение WRITEARRAYFUNCTION. //
     for (int i = 0; i < Dimension; i++) {
          Console.Write ("\n{0:d}) А ({1:d}) = {2,3:d}.", i + 1, i, SourceArray [i]);
     }
}
 
static void InicializastionArrayFunction (ref int [] SourceArray, int Dimension) {
     Random Temporary = new Random ();                                   // Объявление и определение INICIALIZATIONARRAYFUNCTION. //
     for (int i = 0; i < Dimension; i++) {                               // Объявление TEMPORARY типа RANDOM. //
          SourceArray [i] = Temporary.Next (-99, 100);                   // SOURCEARRAY E [-99..99]. //
     }
}
 
static void Main () {
     int Dimension = 0;
     Console.Write ("1. Введите размерность массива: ");
     Dimension = Convert.ToInt32 (Console.ReadLine ());
     int [] SourceArray = new int [Dimension];
     Console.Write ("\n2. Исходный массив:\n");
     InicializastionArrayFunction (ref SourceArray, Dimension);
     WriteArrayFunction (SourceArray, Dimension);
     MinElementFunction (SourceArray, Dimension);
     Console.Write ("\n\nДля продолжения нажмите любую клавишу . . . ");
     Console.ReadKey ();
}
}
}


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

Задание:
Вычислите с использованием функции наибольшие элементы каждой строки матрицы A (10, 20). Результаты формировать в одномерных массивах C (10) и D (10).

ЛР № 6, задание № 5.3.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
{*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.3. Передача массивов в функцию (многомерные массивы).
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: Pascal.
 *Среда: PascalABC.NET v3.5.1.
 *Платформа: отсутствует.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 3. Вычислите с использованием функции MAX элементы каждой строки матрицы A (10, 20). Результаты формировать в одномерных
 *     массивах C (10) и D (10).
 *}
 
const
     N = 5;
     M = 10;
 
type
     SourceArrayType = array [0..N - 1, 0..M - 1] of integer;
     SumArrayType = array [0..N - 1] of integer;
 
var
     ExitVariable: char;
     SourceArray: SourceArrayType;
     SumArray1, SumArray2: SumArrayType;
 
procedure WriteArrayProcedure (SourceArray: SourceArrayType; SumArray1, SumArray2: SumArrayType);
var                                                                  // Объявление и определение WRITEARRAYPROCEDURE. //
     i, j, LengthN: integer;
begin
     i := 0;
     j := 0;
     LengthN := N - 1;
     writeln ('1. Двумерный массив А (', N, ', ', M, '):');
     writeln;
     writeln ('     1     2     3     4     5     6     7     8     9     10');
     writeln ('  |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|');
     for i := 0 to LengthN do begin
          write (i + 1, ' | ');
          for j := 0 to (M - 1) do
               write ((SourceArray [i, j]):3, ' | ');
          writeln ('(', (SumArray1 [i]):3, ')');                     // Можно указать любой из SUMARRAY. //
          writeln ('  |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|')
     end;
     writeln;
     writeln ('2. Наибольшие элементы в одномерном массиве C (', N, '):');
     writeln;
     writeln ('     1     2     3     4     5');
     writeln ('  |-----|-----|-----|-----|-----|');
     write ('1 | ');
     for i := 0 to LengthN do
          write ((SumArray1 [i]):3, ' | ');
     writeln;
     writeln ('  |-----|-----|-----|-----|-----|');
     writeln;
     writeln ('3. Наибольшие элементы в одномерном массиве D (', N, '):');
     writeln;
     writeln ('     1     2     3     4     5');
     writeln ('  |-----|-----|-----|-----|-----|');
     write ('1 | ');
     for i := 0 to LengthN do
          write ((SumArray2 [i]):3, ' | ');
     writeln;
     writeln ('  |-----|-----|-----|-----|-----|');
end;
 
function MaxElementsFunction (SourceArray: SourceArrayType; var SumArray1, SumArray2: SumArrayType): integer;
var                                                                  // Объявление и определение MAXELEMENTSFUNCTION. //
     i, j, MaxElement, MaxIndex: integer;
begin
     i := 0;
     j := 0;
     MaxElement := 0;
     MaxIndex := 0;
     for i := 0 to (N - 1) do begin
          MaxElement := SourceArray [i, 0];
          MaxIndex := 0;
          for j := 0 to (M - 1) do begin
               if (MaxElement < SourceArray [i, j]) then begin
                    MaxElement := SourceArray [i, j];                // Копирование MAXELEMENT текущей строки SOURCEARRAY. //
                    MaxIndex := j                                    // Копирование MAXINDEX текущей строки SOURCEARRAY. //
               end;
          end;
          SumArray1 [i] := SourceArray [i, MaxIndex];                // Копирование в SUMARRAY1, MAX элем. текущей строки SOURCEARRAY. //
          SumArray2 [i] := SumArray1 [i];                            // Копирование текущего элемента SUMARRAY1 в SUMARRAY2. //
     end
end;
 
procedure InicializastionArrayProcedure (var SourceArray: SourceArrayType);
var                                                                  // Объявление и определение INICIALIZATIONARRAYPROCEDURE. //
     i, j: integer;
begin
     i := 0;
     j := 0;
     for i := 0 to (N - 1) do begin
          for j := 0 to (M - 1) do
               SourceArray [i, j] := random (199) - 99;              // SOURCEARRAY E [-99..99]. //
     end
end;
 
begin
     InicializastionArrayProcedure (SourceArray);
     MaxElementsFunction (SourceArray, SumArray1, SumArray2);
     WriteArrayProcedure (SourceArray, SumArray1, SumArray2);
     writeln;
     write ('Для продолжения нажмите любую клавишу . . . ');
     readln (ExitVariable)
end.


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

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

ЛР № 6, задание № 5.4.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
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.4. Использование рекурсии.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 3. Найдите сумму ряда с точностью Е, общий член которого равен A (N) = (-1)^(N - 1) / N^N. Точность считается достигнутой, если
 *     следующий член последовательности меньше заданного E.
 */
 
#include <iostream>                                                       // Требуется для SETLOCATE, PRINTF, CIN, ABS, POW, SYSTEM. //
 
using namespace std;
 
float RecursionFunction (int N, float An, float Sum, float Epsilon) {     // Объявление и определение RECURSIONFUNCTION. //
     printf ("\n%d) A (%d) = (-1)^(%d - 1) / %d^%d = %.5f.", N + 1, N, N, N, N, An);
     if (abs (An) < Epsilon) {
          return (Sum);
     }
     N++;
     An = pow (-1, N - 1) / pow (N, N);
     RecursionFunction (N, An, Sum += An, Epsilon);
}
 
void main () {
     setlocale (LC_ALL, "Russian");
     int N = 0;
     float An = -1, Epsilon = 0, Sum = 0;                                 // AN = - 1 для PRINTF при AN (0) = -1. //
     printf ("1. Введите значение Epsilon: ");
     cin >> Epsilon;
     printf ("\n\n2. Сумма ряда с точностью Epsilon = %f, равна: %.3f.\n\n", Epsilon, RecursionFunction (N, An, Sum, Epsilon));
     system ("pause");
}


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

Задание:
Определите функцию, возвращающую расстояние между точками числа. Выполнить перегрузку функции для следующих типов параметров:
1. Два параметра типа структура "точка" (координаты X, Y).
2. Четыре параметра типа FLOAT.
3. Четыре параметра типа DOUBLE.

Порядок выполнения задания:
1. Создать новый проект.
2. Добавить к проекту файл исходным кодом (.H и .CPP).
3. Вынести в отдельный модуль функции и типы данных.
4. Напишите программу в соответствии с вариантом задания, задав начальные значения при объявлении переменных.
5. Варианты заданий выбирать согласно номера в списке группы.

ЛР № 6, задание № 5.5


1/3. Source.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
58
59
60
61
62
63
64
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.5. Перегрузка функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 13. Определите функцию, возвращающую расстояние между точками числа. Выполнить перегрузку функции для следующих типов
 *     параметров:
 *1. Два параметра типа структура "точка" (координаты X, Y).
 *2. Четыре параметра типа FLOAT.
 *3. Четыре параметра типа DOUBLE.
 *Порядок выполнения задания:
 *1. Создать новый проект.
 *2. Добавить к проекту файл исходным кодом (.H и .CPP).
 *3. Вынести в отдельный модуль функции и типы данных.
 *4. Напишите программу в соответствии с вариантом задания, задав начальные значения при объявлении переменных.
 *5. Варианты заданий выбирать согласно номера в списке группы.
 */
 
#include <iostream>                                                     // Требуется для SETLOCATE, PRINTF, CIN. //
#include "Header.h"
 
void main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0;
     float X1 = 0, Y1 = 0, X2 = 0, Y2 = 0;
     printf ("1. Введите координату X первой точки: ");
     cin >> X1;
     printf ("\n2. Введите координату Y первой точки: ");
     cin >> Y1;
     printf ("\n3. Введите координату X второй точки: ");
     cin >> X2;
     printf ("\n4. Введите координату Y второй точки: ");
     cin >> Y2;
     printf ("\n5. Каким способом вы хотите вычислить расстояние между точками?\n\n1) Два параметра типа структура \"точка\"............."
          "..........1\n2) Четыре параметра типа FLOAT................................2\n3) Четыре параметра типа DOUBLE................."
          "..............3\n\nВаш выбор: ");
     cin >> Choice;
     switch (Choice) {
          case 1: {
               PointsStruct AStruct = {X1, Y1}, BStruct = {X2, Y2};     // Объявление и иниц. ASTRUCT и BSTRUCT типа POINTSSTRUCT. //
               printf ("\n6. Расстояние между двумя точками равно: %.3f ед.\n\n", LengthFunction (AStruct, BStruct));
          } break;
          case 2: {
               printf ("\n6. Расстояние между двумя точками равно: %.3f ед.\n\n", LengthFunction (X1, Y1, X2, Y2));
          } break;
          case 3: {                                                                      
               printf ("\n6. Расстояние между двумя точками равно: %.3f ед.\n\n", LengthFunction (double (X1), double (Y1), double (X2),
                    double (Y2)));
          } break;
          default: {
               printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
               ExitProgramFunction ();
          } break;
     }
     ExitProgramFunction ();
}
2/3. Header.h:

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
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.5. Перегрузка функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 13. (...)
 */
 
using namespace std;
 
struct PointsStruct {                                                   // Объявление POINTSSTRUCT. //
     float X, Y;
};
 
void ExitProgramFunction ();                                            // Объявление EXITPROGRAMFUNCTION. //
float LengthFunction (double X1, double Y1, double X2, double Y2);      // Объявление LENGTHFUNCTION. //
float LengthFunction (float X1, float Y1, float X2, float Y2);          // Объявление LENGTHFUNCTION. //
float LengthFunction (PointsStruct AStruct, PointsStruct BStruct);      // Объявление LENGTHFUNCTION. //
3/3. Functions.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
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.5. Перегрузка функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                      // Требуется для SYSTEM, EXIT, SQRT, POW. //
#include "Header.h"
 
void ExitProgramFunction () {                                            // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
 
float LengthFunction (double X1, double Y1, double X2, double Y2) {      // Определение LENGTHFUNCTION. //
     return (sqrt (pow (X2 - X1, 2) + pow (Y2 - Y1, 2)));
};
 
float LengthFunction (float X1, float Y1, float X2, float Y2) {          // Определение LENGTHFUNCTION. //
     return (sqrt (pow (X2 - X1, 2) + pow (Y2 - Y1, 2))) * -1;           // Для проверки входа в функцию можно, например, добавить в конец
};                                                                       // формулы выражение: * -1. //
 
float LengthFunction (PointsStruct AStruct, PointsStruct BStruct) {      // Определение LENGTHFUNCTION. //
     return (sqrt (pow (BStruct.X - AStruct.X, 2) + pow (BStruct.Y - AStruct.Y, 2)));
};


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

Задание:
Определить функцию, возвращающую прошедшее время в минутах (считать, что разница между передаваемыми значениями не превышает 24 часа). Выполнить перегрузку функции для следующих типов параметров:
1. Два параметра типа структура "время" (часы, минуты, секунды).
2. Шесть целочисленных параметров: часы, минуты, секунды.
3. Четыре целочисленных параметра: часы, минуты.

Порядок выполнения задания:
1. Создать новый проект.
2. Добавить к проекту файл исходным кодом (.H и .CPP).
3. Вынести в отдельный модуль шаблоны функции и типы данных.
4. Напишите программу в соответствии с вариантом задания, задав начальные значения при объявлении переменных.
5. Варианты заданий выбирать путем добавления 3 к номеру студента в списке группы.

ЛР № 6, задание № 5.6


1/3. Source.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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.6. Шаблоны функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 16. Определить функцию, возвращающую прошедшее время в минутах (считать, что разница между передаваемыми значениями не
 *     превышает 24 часа). Выполнить перегрузку функции для следующих типов параметров:
 *1. Два параметра типа структура "время" (часы, минуты, секунды).
 *2. Шесть целочисленных параметров: часы, минуты, секунды.
 *3. Четыре целочисленных параметра: часы, минуты.
 *Порядок выполнения задания:
 *1. Создать новый проект.
 *2. Добавить к проекту файл исходным кодом (.H и .CPP).
 *3. Вынести в отдельный модуль шаблоны функции и типы данных.
 *4. Напишите программу в соответствии с вариантом задания, задав начальные значения при объявлении переменных.
 *5. Варианты заданий выбирать путем добавления 3 к номеру студента в списке группы.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN. //
#include "Header.h"
 
void main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0, Hours1 = 0, Minutes1 = 0, Seconds1 = 0, Hours2 = 0, Minutes2 = 0, Seconds2 = 0;
     printf ("1. Время начала периода не должно превышать время его окончания.\n\n2. Введите час начала периода: ");
     cin >> Hours1;
     printf ("\n3. Введите минуту начала периода: ");
     cin >> Minutes1;
     printf ("\n4. Введите секунду начала периода: ");
     cin >> Seconds1;
     printf ("\n5. Введите час окончания периода: ");
     cin >> Hours2;
     printf ("\n6. Введите минуту окончания периода: ");
     cin >> Minutes2;
     printf ("\n7. Введите секунду окончания периода: ");
     cin >> Seconds2;
     if (((Hours1 * 60 + Minutes1) * 60 + Seconds1) > ((Hours2 * 60 + Minutes2) * 60 + Seconds2)) {
          printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
          ExitProgramFunction ();
     }
     printf ("\n8. Каким способом вы хотите вычислить прошедшее время?\n\n1) Двумя параметрами типа структура \"время\" (часы, минуты, се"
          "кунды)...1\n2) Шестью целочисленными параметрами: часы, минуты, секунды...........2\n3) Четырьмя целочисленными параметрами: ч"
          "асы, минуты..................3\n\nВаш выбор: ");
     cin >> Choice;
     switch (Choice) {
          case 1: {
               TimeStruct T1Struct = {Hours1, Minutes1, Seconds1}, T2Struct = {Hours2, Minutes2, Seconds2};
               printf ("\n9. Всего прошло %.2f минут(-ы).\n\n", TimeFunction (T1Struct, T2Struct));
          } break;                                                   // Объявление и инициализация T1STRUCT и T2STRUCT типа TIMESTRUCT. //
          case 2: {
               printf ("\n9. Всего прошло %.2f минут(-ы) (* -1).\n\n", TimeFunction (Hours1, Minutes1, Hours2, Minutes2, Seconds1,
                    Seconds2));
          } break;
          case 3: {
               printf ("\n9. Всего прошло %.2f минут(-ы) (секунды не учитываются).\n\n", TimeFunction (Hours1, Minutes1, Hours2,
                    Minutes2));
          } break;
          default: {                                                                                
               printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
               ExitProgramFunction ();
          } break;
     }
     ExitProgramFunction ();
}
2/3. Header.h:

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
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.6. Шаблоны функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 16. (...)
 */
 
using namespace std;
 
struct TimeStruct {                                                      // Объявление TIMESTRUCT. //
     int Hours, Minutes, Seconds;
};
 
void ExitProgramFunction ();                                             // Объявление EXITPROGRAMFUNCTION. //
 
template <class DataType>                                                // Объявление и определение TIMEFUNCTION. //
float TimeFunction (DataType Hours1, DataType Minutes1, DataType Hours2, DataType Minutes2) {
     return ((Hours2 - Hours1) * 60 - Minutes1 + Minutes2);              // В CLASS только FLOAT, иначе RETURN не работает. //
}
 
template <class DataType>                                                // Объявление и определение TIMEFUNCTION. //
float TimeFunction (DataType Hours1, DataType Minutes1, DataType Hours2, DataType Minutes2, DataType Seconds1, DataType Seconds2) {
     int SumMinutes = (Hours2 - Hours1) * 60 - Minutes1 + Minutes2;      // В CLASS только FLOAT, иначе RETURN не работает. //
     float SumSeconds = (Seconds2 - Seconds1) / 60.;
     return ((SumMinutes + SumSeconds) * -1);                            // Для проверки входа в TEMPLATE можно, например, добавить в
}                                                                        // конец формулы выражение: * -1. //
 
template <class DataType>
float TimeFunction (DataType T1Struct, DataType T2Struct) {              // Объявление и определение TIMEFUNCTION. //
     int SumMinutes = (T2Struct.Hours - T1Struct.Hours) * 60 - T1Struct.Minutes + T2Struct.Minutes;
     float SumSeconds = (T2Struct.Seconds - T1Struct.Seconds) / 60.;     // В CLASS только FLOAT, DATATYPE - запрещено.//
     return (SumMinutes + SumSeconds);
}
3/3. Functions.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
/*
 *Лабораторная работа: 6.
 *Тема: Подпрограммы. Организация подпрограмм.
 *Пункт: 5.6. Шаблоны функций.
 *Файл: Lab06_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 01.11.2019.
 *Задание: 16. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
Вложения
Тип файла: rar 01.11.2019 - ЛР 6.rar (846.8 Кб, 1161 просмотров)
Размещено в Без категории
Просмотров 172 Комментарии 4
Всего комментариев 4
Комментарии
  1. Старый комментарий
    Аватар для bormant
    Несколько существенных и косметических замечаний по 5.2.pas:
    0) задание производит впечатление обрубка, ощущение, что искать собирались min и max по строкам, либо min и их индексы, либо еще что-то разное, но что есть, то есть;
    1) пропущен вызов Randomize, все запуски будут давать один и тот же вывод, поскольку генерация последовательности ПСЧ в каждом из запусков будет начата с RandSeed=0;
    2) изменение константы M ломает вывод программы;
    3) если собрать программу с контролем переполнения, строка 101 в некоторых трансляторах Паскаль даст Runtime error;
    4) функция MaxElementsFunction возвращает мусор в качестве своего значения;
    5) для вычисления максимумов в строках функция не используется;
    6) лишние ненужные копирования массивов (не во всех реализациях Паскаля они ссылочные типы);
    7) наличие переменной LengthN не несет никакой пользы окромя вреда;
    8) наличие переменной ExitVariable не несет никакой пользы, строка "ReadLn;" сделает ровно то же самое;
    9) сообщение, выводимое в строке 56 вводит в заблуждение, выход будет только по Enter;
    10) наличие скобок вокруг выражений в строках 44-46, 56, 66, 79, 82-83, 99 не требуется;
    11) строки 35-36, 75-76, 97, 98 бесполезны;
    12) если искать MaxElement, искать его индекс не требуется (лишние ненужные телодвижения).
    Запись от bormant размещена 28.01.2020 в 23:57 bormant вне форума
  2. Старый комментарий
    Аватар для Соколиный глаз
    Писали бы Вы в [B]Free Pascal[/B], например, в [B]Lazarus[/B], познали бы истинный Паскаль, всё равно ничего из [B].NET[/B] не используйте в [B]PascalABC.NET[/B].
    Запись от Соколиный глаз размещена 29.01.2020 в 02:49 Соколиный глаз вне форума
  3. Старый комментарий
    Аватар для bormant
    К слову, в PascalABC.NET весьма нестандартное понимание статических массивов. В языке Паскаль, независимо от способа объявления массива:
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    
    type
      TRow = array [0..m-1] of Integer;
      TMatrix = array [0..n-1] of TRow;
      TMatrix2 = array [0..n-1,0..m-1] of Integer;
    var
      a: TMatrix;
      b: TMatrix2;
      c: array [0..n-1,0..m-1] of Integer;
    a[0], b[0], c[0] будут являться "array [0..m-1] of Integer", но в PascalABC.NET это не так. Более-менее универсальный код в стандартном Паскалевском стиле возможен с динамическими массивами массивов. Впрочем, могу ошибаться, поскольку и не то чтобы знаток, и точно не поклонник сего диалекта.
    Запись от bormant размещена 29.01.2020 в 09:44 bormant вне форума
  4. Старый комментарий
    Аватар для Соколиный глаз
    В [B]PascalABC.NET[/B] статические массивы изнутри - обёртка над динамическими... Сделано лишь для иллюзорной совместимости с другими диалектами. Тут мало что от реального Паскаля есть. По-сути это перекрашенный под Паскаль C#...
    Запись от Соколиный глаз размещена 29.01.2020 в 18:09 Соколиный глаз вне форума
    Обновил(-а) Соколиный глаз 29.01.2020 в 18:13
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.