с лабораторной работой, нужны только две программы на паскале, скриншот задания прикрепляю. Тема лабораторной работы: Обработка структурированных типов данных. Сведения, необходимые для выполнения работы: Структурированные типы данных характеризуется: 1) множественностью элементов, когда переменная или константа имеет несколько компонентов; 2) все компоненты должны быть одного типа; 3) компоненты упорядочены, доступ к обеспечивается указанием его номера. Массив – это фиксированное количество элементов одного и того же типа, объединенных одним именем, где каждый элемент имеет свой номер. Описание массива задается следующим образом: var Имя_массива: ARRAY [размерность] OF тип_элементов; где имя_массива - идентификатор; ARRAY - массив; OF - из; В качестве размерности массива можно использовать любые порядковые типы, обычно тип-диапазон, в котором задаются изменения индексов. Тип элементов - любой, он может быть и другим массивом. Глубина вложенности структурированных типов - произвольная. Число элементов массива должно задаваться заранее. Если необходимо использование массивов переменной размерности, то описываются массивы с максимально возможным числом элементов, а реально используется только часть. Заполнение и вывод массива можно осуществить с клавиатуры, с генератора случайных чисел RANDOM или из файла. Оператором присваивания передать все элементы одного массива другому массиву того же типа. Hад массивами не определены операции отношения. выделения памяти для хранения элементов массива регулируется с зарезервированного слова PACKED (упакованный), что должно уменьшить объем памяти, выделяемый под переменные этого типа. TYPE Имя_массива = PACKED ARRAY [размерность] OF тип; Для описания массива в программе используются циклы со счетчиком. Доступ к каждому элементу массива в программе осуществляется с индекса - целого числа или выражения порядкового типа. Индекс не должен выходить за пределы, описанные типом-диапазоном. Массивы, положение элементов в которых описывается несколькими индексами, называется многомерными. Их описание задается следующим образом: VAR ИМЯ_МАССИВА: ARRAY [РАЗМЕРНОСТЬ1, …, РАЗМЕРНОСТЬN] OF ТИП_ ЭЛЕМЕНТОВ;
Доступ к каждому элементу массива осуществляется с индекса, который не должен выходить за пределы, описанные типом-диапозоном. Turbo Pascal контролирует использование индексов на этапах компиляции и счета программы. Двумерный массив часто называется матрицей. Матрица представляет собой таблицу, состоящую из нескольких столбцов и строк. Над матрицами можно выполнять различные операции: сложение, умножение, вычитание, транспонирование и другие. Положение элемента в двумерном массиве описывается двумя индексами, например I–номер строки и J–номер столбца. Ввод, вывод и обработка многомерного массива осуществляется вложенными циклами.
type ListSimple = class l := new List<int64>(); procedure AddSimple(N: int64); begin var Result := True;
var num := n; while num > 0 do begin if not (num mod 10 in [2,3,5,7]) then begin Result := False; break; end; num := num div 10; end; if not Result then exit;
for var i: int64 := 2 to round(sqrt(N)) do if N mod i = 0 then begin Result := False; break; end; // lock не позволяет нескольким потокам одновременно выполнять эту секцию. // Это обязательно, иначе если несколько потоков одновременно будут пытаться добавить значение в список, список может оказаться испорченным // Секция, охраняемая lock, называется критической lock l do if Result then l.Add(N); end; end;
var hh := 100000;
begin var ls := new ListSimple; var ii: int64 := 2;
Parallel.For(ii, ii + hh, ls.AddSimple); writeln(ls.l.Count); ls.l := ls.l.OrderBy(x->x).ToList(); //- это можно включить для проверки того, что в обоих списках - одинаковые простые числа for var i := 0 to ls.l.Count - 1 do writeln(i+1,' - ',ls.l[i]);
writeln; writeln('Время выполнения = ', Milliseconds); end.
// PascalABC.NET 3.2, сборка 1415 от 25.03.2017 // Внимание! Если программа не работает, обновите версию!
begin var n:=ReadInteger('Количество строк в массиве:'); var m:=ReadInteger('Количество столбцов в массиве:'); Writeln('*** Исходный массив [',n,',',m,'] ***'); var a:=new real[n,m]; for var i:=0 to n-1 do for var j:=0 to m-1 do a[i,j]:=Random(5,90); a.Println(3,0); Writeln; var p:=a.ElementsByRow.Min; for var i:=0 to n-1 do for var j:=0 to m-1 do a[i,j]:=a[i,j]/p; a.Println(7,3) end.
Пример Количество строк в массиве: 4 Количество столбцов в массиве: 7 *** Исходный массив [4,7] *** 83 87 11 18 74 78 24 45 28 59 56 14 67 5 74 65 48 79 68 45 37 52 70 16 82 5 51 70
uses
System, System.Net, System.Threading.Tasks, System.Collections.Generic;
type
ListSimple = class
l := new List<int64>();
procedure AddSimple(N: int64);
begin
var Result := True;
var num := n;
while num > 0 do begin
if not (num mod 10 in [2,3,5,7]) then
begin
Result := False;
break;
end;
num := num div 10;
end;
if not Result then exit;
for var i: int64 := 2 to round(sqrt(N)) do
if N mod i = 0 then
begin
Result := False;
break;
end;
// lock не позволяет нескольким потокам одновременно выполнять эту секцию.
// Это обязательно, иначе если несколько потоков одновременно будут пытаться добавить значение в список, список может оказаться испорченным
// Секция, охраняемая lock, называется критической
lock l do
if Result then
l.Add(N);
end;
end;
var
hh := 100000;
begin
var ls := new ListSimple;
var ii: int64 := 2;
Parallel.For(ii, ii + hh, ls.AddSimple);
writeln(ls.l.Count);
ls.l := ls.l.OrderBy(x->x).ToList(); //- это можно включить для проверки того, что в обоих списках - одинаковые простые числа
for var i := 0 to ls.l.Count - 1 do
writeln(i+1,' - ',ls.l[i]);
writeln;
writeln('Время выполнения = ', Milliseconds);
end.
Список суперпростых
1 - 2
2 - 3
3 - 5
4 - 7
5 - 23
6 - 37
7 - 53
8 - 73
9 - 223
10 - 227
11 - 233
12 - 257
13 - 277
14 - 337
15 - 353
16 - 373
17 - 523
18 - 557
19 - 577
20 - 727
21 - 733
22 - 757
23 - 773
24 - 2237
25 - 2273
26 - 2333
27 - 2357
28 - 2377
29 - 2557
30 - 2753
31 - 2777
32 - 3253
33 - 3257
34 - 3323
35 - 3373
36 - 3527
37 - 3533
38 - 3557
39 - 3727
40 - 3733
41 - 5227
42 - 5233
43 - 5237
44 - 5273
45 - 5323
46 - 5333
47 - 5527
48 - 5557
49 - 5573
50 - 5737
51 - 7237
52 - 7253
53 - 7333
54 - 7523
55 - 7537
56 - 7573
57 - 7577
58 - 7723
59 - 7727
60 - 7753
61 - 7757
62 - 22273
63 - 22277
64 - 22573
65 - 22727
66 - 22777
67 - 23227
68 - 23327
69 - 23333
70 - 23357
71 - 23537
72 - 23557
73 - 23753
74 - 23773
75 - 25237
76 - 25253
77 - 25357
78 - 25373
79 - 25523
80 - 25537
81 - 25577
82 - 25733
83 - 27253
84 - 27277
85 - 27337
86 - 27527
87 - 27733
88 - 27737
89 - 27773
90 - 32233
91 - 32237
92 - 32257
93 - 32323
94 - 32327
95 - 32353
96 - 32377
97 - 32533
98 - 32537
99 - 32573
100 - 33223
101 - 33353
102 - 33377
103 - 33533
104 - 33577
105 - 33757
106 - 33773
107 - 35227
108 - 35257
109 - 35323
110 - 35327
111 - 35353
112 - 35527
113 - 35533
114 - 35537
115 - 35573
116 - 35753
117 - 37223
118 - 37253
119 - 37273
120 - 37277
121 - 37337
122 - 37357
123 - 37537
124 - 37573
125 - 52223
126 - 52237
127 - 52253
128 - 52553
129 - 52727
130 - 52733
131 - 52757
132 - 53233
133 - 53323
134 - 53327
135 - 53353
136 - 53377
137 - 53527
138 - 53773
139 - 53777
140 - 55333
141 - 55337
142 - 55373
143 - 55733
144 - 57223
145 - 57373
146 - 57527
147 - 57557
148 - 57727
149 - 57737
150 - 57773
151 - 72223
152 - 72227
153 - 72253
154 - 72277
155 - 72337
156 - 72353
157 - 72533
158 - 72577
159 - 72727
160 - 72733
161 - 73237
162 - 73277
163 - 73327
164 - 73523
165 - 73553
166 - 73727
167 - 73757
168 - 75223
169 - 75227
170 - 75253
171 - 75277
172 - 75323
173 - 75337
174 - 75353
175 - 75377
176 - 75527
177 - 75533
178 - 75553
179 - 75557
180 - 75577
181 - 75773
182 - 77237
183 - 77323
184 - 77377
185 - 77527
186 - 77557
187 - 77573
188 - 77723
189 - 77773
// Внимание! Если программа не работает, обновите версию!
begin
var n:=ReadInteger('Количество строк в массиве:');
var m:=ReadInteger('Количество столбцов в массиве:');
Writeln('*** Исходный массив [',n,',',m,'] ***');
var a:=new real[n,m];
for var i:=0 to n-1 do
for var j:=0 to m-1 do
a[i,j]:=Random(5,90);
a.Println(3,0); Writeln;
var p:=a.ElementsByRow.Min;
for var i:=0 to n-1 do
for var j:=0 to m-1 do
a[i,j]:=a[i,j]/p;
a.Println(7,3)
end.
Пример
Количество строк в массиве: 4
Количество столбцов в массиве: 7
*** Исходный массив [4,7] ***
83 87 11 18 74 78 24
45 28 59 56 14 67 5
74 65 48 79 68 45 37
52 70 16 82 5 51 70
16.600 17.400 2.200 3.600 14.800 15.600 4.800
9.000 5.600 11.800 11.200 2.800 13.400 1.000
14.800 13.000 9.600 15.800 13.600 9.000 7.400
10.400 14.000 3.200 16.400 1.000 10.200 14.000