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

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

Запись от Nikolay K размещена 28.01.2020 в 18:07
Показов 2288 Комментарии 1

Лабораторная работа: 5.
Тема: Структурированные типы данных (массивы).
Файл: Lab05_YaP_2019_1S.pdf

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


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

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

ЛР № 5, задание № 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
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
/*
 *Лабораторная работа: 5.
 *Тема: Структурированные типы данных (массивы).
 *Пункт: 5.1. Одномерные массивы (векторы).
 *Файл: Lab05_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 18.10.2019.
 *Задание: 13. Дан одномерный массив, состоящий из N целочисленных элементов:
 *1. Ввести массив с клавиатуры.
 *2. Найти максимальный отрицательный элемент.
 *3. Вычислить произведение четных элементов массива.
 *4. Вывести ненулевые элементы на экран в обратном порядке.
 *5. Отсортировать массив методом выбора элементов и вывести отсортированный массив на экран.
 */
 
#include <iostream>                                                                // Треб. для SETLOCATE, PRINTF, CIN, COUT, SYSTEM. //
#include <ctime>                                                                   // Требуется для TIME. //
 
using namespace std;
 
void main () {
     setlocale (LC_ALL, "Russian");
     const int Dimension = 5;
     int MinElement = 0, Counter = 1, Multiplication = 1;
     int SourceArray [Dimension];
     srand (time (0));                                                             // TIME (0) - иниц. локального времени системы. //
     SourceArray [0] = rand () % 199 - 99;                                         // SOURCEARRAY E [-99..99]. //
     if (SourceArray [0] < 0) {
          MinElement = SourceArray [0];
     }
     if (SourceArray [0] % 2 == 0) {
          Multiplication = SourceArray [0];                                        // Если SOURCEARRAY [0] четный, тогда произв. равно
     }                                                                             // этому элементу. //
     printf ("1. Размерность массива равна: %3d.\n\n2. Элементы массива:\n\n1) A (0) = %3d.", Dimension, SourceArray [0]);
     for (int i = 1; i < Dimension; i++) {
          SourceArray [i] = rand () % 199 - 99;                                    // Ввод остальных элементов. //
          if ((SourceArray [i] < 0) && (SourceArray [i] < MinElement)) {           // Вычисляется наибольший отрицательный элемент. //
               MinElement = SourceArray [i];
          }
          if (SourceArray [i] % 2 == 0) {                                          // Если элемент четный, то вычисляется произведение
               Multiplication *= SourceArray [i];                                  // четных элементов. //
          }
          printf ("\n%d) A (%d) = %3d.", i + 1, i, SourceArray [i]);
     }
     if (MinElement == 0) {
          printf ("\n\n3. Отрицательные элементы в массиве отсутствуют.\n\n");     // Выводится на экран, если в SOURCEARRAY отрицательных
     }                                                                             // элементов нет. // 
     else {
          printf ("\n\n3. Наибольший отрицательный элемент массива: %d.\n\n", MinElement);
     }
     if (Multiplication == 1) {
          printf ("4. Четные элементы в массиве отсутствуют.\n\n");                // Выводится на экран, если в SOURCEARRAYЕ четных
     }                                                                             // элементов нет. //
     else {
          printf ("4. Произведение четных элементов массива равно: %d.\n\n", Multiplication);
     }
     printf ("5. Ненулевые элементы массива в обратном порядке:\n\n");
     for (int i = Dimension - 1; i >= 0; i--) {                                    // Вывод на экран ненулевых элементов в обратном
          if (SourceArray [i] != 0) {                                              // порядке. //
               printf ("%d) A (%d) = %3d.\n", Counter++, i, SourceArray [i]);
          }
     }
     for (int i = 0; i < Dimension - 1; i++) {                                     // Упорядочивание элементов методом Выбора. //
          MinElement = i;                                                          // На каждой итер. MINELEMENT яв. SOURCEARRAY [I]. //
          for (int j = i + 1; j < Dimension; j++) {                                // Поиск MINELEMENT из
               if (SourceArray [j] < SourceArray [MinElement]) {                   // SOURCEARRAY [I + 1..DIMENSION - 1]. //
                    MinElement = j;
               }
          }
          if (i != MinElement) {                                                   // Если MINELEMENT все-таки был найден, то замена их
               Counter = SourceArray [i];                                          // местами. //
               SourceArray [i] = SourceArray [MinElement];
               SourceArray [MinElement] = Counter;                                 // COUNTER в данном случае временная переменная. //
          }
     }
     printf ("\n6. Элементы массива упорядоченные методом Выбора:\n\n");
     for (int i = 0; i < Dimension; i++) {                                         // Вывод на экран упорядоченного SOURCEARRAY. //
          printf ("%d) A (%d) = %3d.\n", i + 1, i, SourceArray [i]);
     }
     cout << endl;
     system ("pause");
}


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

Задание:
Дана матрица А (N, M). Сформировать одномерный массив В (N), элементами которого являются суммы элементов I-ой строки.

ЛР № 5, задание № 5.2.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
{*
 *Лабораторная работа: 5.
 *Тема: Структурированные типы данных (массивы).
 *Пункт: 5.2. Многомерные массивы (матрицы).
 *Файл: Lab05_YaP_2019_1S.pdf
 *
 *Язык: Pascal.
 *Среда: PascalABC.NET v3.5.1.
 *Платформа: отсутствует.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 18.10.2019.
 *Задание: 13. Дана матрица А (N, M). Сформировать одномерный массив В (N), элементами которого являются суммы элементов I-ой строки.
 *}
 
const
     N = 5;
     M = 10;
 
var
     i, j, LengthN: integer;
     Sum: real;
     ExitVariable: char;
     SourceArray: array [0..N - 1, 0..M - 1] of integer;             // SOURCEARRAY [строки, столбцы]. //
     SumArray: array [0..N - 1] of integer;
 
begin
     LengthN := N - 1;
     writeln ('1. Двумерный массив A (', N, ', ', M, '):');
     writeln;
     writeln ('     1     2     3     4     5     6     7     8     9     10');
     writeln ('  |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|');
     for i := 0 to LengthN do begin
          Sum := 0;
          write (i + 1);
          for j := 0 to (M - 1) do begin
               SourceArray [i, j] := random (199) - 99;              // SOURCEARRAY E [-99..99]. //
               write (' | ', (SourceArray [i, j]):3);
               SumArray [i] := SumArray [i] + SourceArray [i, j]
          end;
          writeln (' | (', (SumArray [i]):4, ')');
          writeln ('  |-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|')
     end;
     writeln;
     writeln ('2. Одномерный массив B (', N,'):');
     writeln;
     writeln ('      1      2      3      4      5');
     writeln ('  |------|------|------|------|------|');
     write ('1');
     for i := 0 to LengthN do
          write (' | ', (SumArray [i]):4);
     writeln (' |');
     writeln ('  |------|------|------|------|------|');
     writeln;
     write ('Для продолжения нажмите любую клавишу . . . ');
     readln (ExitVariable)
end.


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

Задание:
Вычислить сумму заштрихованных элементов матрицы показанных на рисунке.

Примечание:
Рисунок смотрите под спойлером или в Lab05_YaP_2019_1S.pdf.

ЛР № 5, задание № 5.3.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
/*
 *Лабораторная работа: 5.
 *Тема: Структурированные типы данных (массивы).
 *Пункт: 5.3. Многомерные массивы (матрицы).
 *Файл: Lab05_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 18.10.2019.
 *Задание: 3. Вычислить сумму заштрихованных элементов матрицы показанных на рисунке.
 *
 *Примечание:
 *1. Рисунок двумерного массива:
 *
 *          1   2   3   4   5   6   7
 *        |---|---|---|---|---|---|---|
 *     1  | x |   |   |   |   |   | x |
 *        |---|---|---|---|---|---|---|
 *     2  |   | x |   |   |   | x |   |
 *        |---|---|---|---|---|---|---|
 *     3  |   |   | x |   | x |   |   |
 *        |---|---|---|---|---|---|---|
 *     4  |   |   |   | x |   |   |   |
 *        |---|---|---|---|---|---|---|
 *     5  |   |   | x |   | x |   |   |
 *        |---|---|---|---|---|---|---|
 *     6  |   | x |   |   |   | x |   |
 *        |---|---|---|---|---|---|---|
 *     7  | x |   |   |   |   |   | x |
 *        |---|---|---|---|---|---|---|
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, SRAND, PRINTF, RAND, COUT, SYSTEM. //
#include <ctime>                                                     // Требуется для TIME. //
 
using namespace std;
 
void main () {
     setlocale (LC_ALL, "Russian");
     const int Dimension = 7;
     int Sum = 0, TotalSum = 0;
     int SourceArray [Dimension] [Dimension];                        // SOURCEARRAY [строки, столбцы]. //
     srand (time (0));                                               // TIME (0) - инициализация локального времени системы. //
     printf ("1. Двумерный массив (%d, %d):\n\n     1     2     3     4     5     6     7\n  |-----|-----|-----|-----|-----|-----|-----|"
          "\n", Dimension, Dimension);
     for (int i = 0; i < Dimension; i++) {
          Sum = 0;
          printf ("%d |", i + 1);
          for (int j = 0; j < Dimension; j++) {
               SourceArray [i] [j] = rand () % 199 - 99;             // SOURCEARRAY E [-99..99]. //
               printf (" %3d |", SourceArray [i] [j]);
               if ((j == i) || (Dimension - 1 - j == i)) {           // (главная диагональ) || (второстепенная диагональ: количество
                    Sum += SourceArray [i] [j];                      // столбиков - текущий столбик = текущая строка). //
               }
          }
          TotalSum += Sum;
          printf (" (%3d)\n  |-----|-----|-----|-----|-----|-----|-----|\n", Sum);
     }
     printf ("\n2. Сумма заштрихованных элементов равна: %d.\n\n", TotalSum);
     system ("pause");
}


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

Задание:
Дан одномерный массив, получить другой массив той же размерности, каждый элемент которого равен B (I) = A (1) + A (2) + ... + A (I).

ЛР № 5, задание № 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
43
44
45
46
47
48
49
/*
 *Лабораторная работа: 5.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 6.1. Одномерные массивы (векторы).
 *Файл: Lab05_YaP_2019_1S.pdf
 *
 *Язык: C Sharp.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: Any CPU.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 18.10.2019.
 *Задание: 13. Дан одномерный массив, получить другой массив той же размерности, каждый элемент которого равен
 *     B (I) = A (1) + A (2) + ... + A (I).
 */
 
using System;
 
namespace Program {
 
class Program {
 
static void Main () {
     int Dimension = 0;
     Random Temporary = new Random ();                               // Объявление TEMPORARY типа RANDOM. //
     Console.Write ("1. Введите размерность массивов (от 1 до + oo): ");
     Dimension = Convert.ToInt32 (Console.ReadLine ());
     int [] SourceArray = new int [Dimension];
     int [] ChangeArray = new int [Dimension];
     Console.Write ("\n2. Исходный массив A ({0:d}):\n", Dimension);
     for (int i = 0; i < Dimension; i++) {                           // Ввод элементов SOURCEARRAY. //
          SourceArray [i] = Temporary.Next (-99, 100);               // SOURCEARRAY E [-99..99]. //
          Console.Write ("\n{0:d}) A ({1:d}) = {2,3:d}.", i + 1, i, SourceArray [i]);
     }
     ChangeArray [0] = SourceArray [0];
     Console.Write ("\n\n3. Вывод элементов массива B ({0:d}):\n\n1) B (0) = A (0) = {1:d}.", Dimension, ChangeArray [0]);
     for (int i = 1; i < Dimension; i++) {                           // ARRAYB [0] = SOURCEARRAY [0]. //
          for (int j = 0; j <= i; j++) {
               ChangeArray [i] += SourceArray [j];                   // Каждому последующему элементу ARRAYB, присваивается сумма
          }                                                          // элементов SOURCEARRAY. //
          Console.Write ("\n{0:d}) B ({1:d}) = B ({2:d}) + A ({3:d}) = {4,4:d} + {5,4:d} = {6,4:d}.", i + 1, i, i - 1, i,
               ChangeArray [i - 1], SourceArray [i], ChangeArray [i]);
     }
     Console.Write ("\n\nДля продолжения нажмите любую клавишу . . . ");
     Console.ReadKey ();
}
}
}


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

Задание:
В каждой строке заданного двухмерного массива размерности (N, M) сменить знак наибольшего по модулю элемента на противоположный.

ЛР № 5, задание № 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
/*
 *Лабораторная работа: 5.
 *Тема: Операторы цикла и передачи управления.
 *Пункт: 6.1. Одномерные массивы (векторы).
 *Файл: Lab05_YaP_2019_1S.pdf
 *
 *Язык: C Sharp.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: Any CPU.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 18.10.2019.
 *Задание: 13. В каждой строке заданного двухмерного массива размерности (N, M) сменить знак MAX по модулю элемента на противоположный.
 */
 
using System;
 
namespace Program {
 
class Program {
 
static void Main () {
     int Dimension = 0, Dimension2 = 0, MaxElement = 0, MaxIndex = 0;
     Random Temporary = new Random ();                                         // Объявление TEMPORARY типа RANDOM. //
     Console.Write ("1. Введите количество строк (от 1 до + oo): ");
     Dimension = Convert.ToInt32 (Console.ReadLine ());
     Console.Write ("\n2. Введите количество стобцов (от 1 до + oo): ");
     Dimension2 = Convert.ToInt32 (Console.ReadLine ());
     int [,] SourceArray = new int [Dimension, Dimension2];                    // SOURCEARRAY [строки, столбцы]. //
     Console.Write ("\n3. Исходный массив:\n");
     for (int i = 0; i < Dimension; i++) {                                     // Инициализация SOURCEARRAY. //
          SourceArray [i, 0] = Temporary.Next (-99, 100);                      // Инициализация первого элемента
          MaxElement = Math.Abs (SourceArray [i, 0]);                          // SOURCEARRAY E [-99..99]. //
          MaxIndex = 0;
          Console.Write ("\n{0:d}) {1,3:d} ", i + 1, SourceArray [i, 0]);
          for (int j = 1; j  < Dimension2; j++) {                              // Инициализация остальных элем. J = 1, чтобы не повт. //
               SourceArray [i, j] = Temporary.Next (-99, 100);                 // SOURCEARRAY E [-99..99]. //
               if (MaxElement < Math.Abs (SourceArray [i, j])) {
                    MaxElement = Math.Abs (SourceArray [i, j]);                // Поиск MAXELEMENT. //
                    MaxIndex = j;                                              // Поиск индекса MAXELEMENT. //
               }
               Console.Write ("{0,3:d} ", SourceArray [i, j]);
          }
          Console.Write (" ({0,3:d})", SourceArray [i, MaxIndex]);
          SourceArray [i, MaxIndex] *= -1;                                     // Замена знака MAXELEMENT на противоположный. //
     }
     Console.Write ("\n\n4. Массив с измененным наибольшим элементом:\n");
     for (int i = 0; i < Dimension; i++) {
          Console.Write ("\n{0:d}) ", i + 1);
          for (int j = 0; j < Dimension2; j++) {
               Console.Write ("{0,3:d} ", SourceArray [i, j]);                 // Вывод SOURCEARRAY на экран. //
          }
     }
     Console.Write ("\n\nДля продолжения нажмите любую клавишу . . . ");
     Console.ReadKey ();
}
}
}
Вложения
Тип файла: rar 18.10.2019 - ЛР 5.rar (533.0 Кб, 1531 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 1
Комментарии
  1. Старый комментарий
    Аватар для bormant
    Несколько существенных и косметических замечаний по 5.2.pas:
    1) пропущен вызов Randomize, все запуски будут давать один и тот же вывод, поскольку генерация последовательности ПСЧ в каждом из запусков будет начата с RandSeed=0;
    2) изменение константы M ломает вывод программы;
    3) если собрать программу с контролем переполнения, строка 38 в некоторых трансляторах Паскаль даст Runtime error;
    4) наличие переменной LengthN не несет никакой пользы окромя вреда;
    5) наличие переменной ExitVariable не несет никакой пользы, строка "ReadLn;" сделает ровно то же самое;
    6) наличие действительной переменной Sum не несет никакой пользы;
    7) сообщение, выводимое в строке 56 вводит в заблуждение, выход будет только по Enter;
    8) наличие скобок вокруг выражений в строках 37, 39, 42, 52 не требуется.

    Решение, лишенное всех перечисленных недостатков могло быть таким:
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    
    const n=5; m=10; W=4;
    var
      a: array [0..n-1,0..m-1] of Integer;
      b: array [0..n-1] of Integer;
      i, j, t: Integer;
    begin
      Randomize;
      WriteLn('A =','':m*W,'B =');
      for i:=0 to n-1 do begin
        for j:=0 to m-1 do begin
          t:=-99+Random(199); a[i,j]:=t; Inc(b[i],t); Write(t:W);
        end; WriteLn(' | ',b[i]:W);
      end;
      Write('Нажмите Enter...'); ReadLn;
    end.
    А если матрицу и вектор нужно только вывести, то и того проще:
    Pascal
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    
    const n=5; m=10; W=4;
    var a, b, i, j: Integer;
    begin
      Randomize;
      WriteLn('A =','':m*W,'B =');
      for i:=0 to n-1 do begin
        b:=0;
        for j:=0 to m-1 do begin
          a:=-99+Random(199); Inc(b,a); Write(a:W);
        end; WriteLn(' | ',b:W);
      end;
      Write('Нажмите Enter...'); ReadLn;
    end.
    Запись от bormant размещена 28.01.2020 в 23:07 bormant вне форума
 
Новые блоги и статьи
Скрипты 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, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru