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

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

Запись от Nikolay K размещена 28.01.2020 в 18:07
Показов 2277 Комментарии 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 вне форума
 
Новые блоги и статьи
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2. Задача: Обеспечить запись документа в регистр сведений независимо от. . .
Ноутбук Альфария
kumehtar 24.08.2026
Встретился тут в сети ноутбук Альфария, примарха Альфа-Легиона. Хотя возможно, это ноутбук Омегона, разумеется. Ну как вам?
Мастера простых решений
DevAlt 23.08.2026
В сишарп стэках winforms, да и wpf существует сложная система связывания источниках данных и элементов формы(текстовые поля и метки), опирается все это на технологию событий и мета. . .
Цена ошибки
DevAlt 23.08.2026
Человек я беспокойный и потому заинтересовался OCaml, в чате форсили функторы модулей как суперфичу. Пытаясь отдуплить концепт, наткнулся на тутор с простым примером. А главный принцип обучения от. . .
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru