№1.Создать массив целых чисел R[1..N], содержащий серии чисел, разделенных нулями. Отсортировать массив по возрастанию сумм чисел в сериях.
Т.е. например дан массив
1 2 3 0 -1 2 3 0 6 7 3 0 3 3 3
данный массив нужно преобразовать по возрастанию сумм в сериях , чтоб получилось следующее:
-1 2 3 0 1 2 3 0 3 3 3 0 6 7 3
МОИ мысли по этой задаче:
uses crt;
const n=20;
var nach:array[1..n+1] of integer;
a,s, g:array[1..n] of integer;
i, j, h, k, c,gh, l :integer;
priz:boolean;
begin clrscr;
randomize;
for i:=1 to n do
begin a:=-5+random(10);
write(a, ' ');
end;
writeln;
i:=0; j:=0;
repeat
inc(j); s[j]:=0;
nach[j]:=i+1;
???????????
repeat
inc(i);
s[j]:=s[j]+a;
until (a=0) or (n=i);
writeln(s[j], '=б㬬* ', j);
until n=i;
k:=j;
gh:=j;
repeat dec(k);
priz:=true;
for j:=1 to k do
if s[j]>s[j+1] then begin
c:=s[j];
s[j]:=s[j+1];
s[j+1]:=c;
l:=nach[j];
nach[j]:=nach[j+1];
nach[j+1]:=l;
priz:=false;
end;
until priz;
writeln;
for h:=1 to gh do
write(nach[h],' ');
readkey;
end.
p.s. Там где стоит знак ? нужно дополнить.....ну я так думаю.....
№2. Построено N домов по M квартир в каждом доме. Сформировать матрицу А[N*M], где записать метраж каждой квартиры, в матрицу В записать число проживающих в каждой квартире. Создать массив С, где будет указано число квартир каждого дома, где на одного проживающего приходится менее 7 метров.
Свои мысли по поводу этой задачи выложу чуть позже.....
Одномер. и двумер. массивы(Pascal)
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
1)
Код: Выделить всё
const
N=20; {макс. число элементов}
MaxGN=N; {макс. количество групп}
GN:integer=0; {кол-во групп}
type
TR =array[1..N+1] of integer; {массив}
TGroup = record {группа}
pos:integer; {с какого элемента начинается группа}
len:integer; {какой она длины}
sum:longint; {ее сумма}
end;
var
R,R2: TR; {исходный и результир. массивы}
G: array[1..MaxGN] of TGroup; {массив групп}
Gi: TGroup;
i,j,k:integer;
{заполнение массива сл. числами}
procedure Init(var A:TR);
var
i,EOG:integer;
begin
EOG:=random(N div 2)+1;
for i:=1 to N do begin
if i=EOG then begin
A[i]:=0; EOG:=i+random(N div 2)+1;
end else
A[i]:=random(maxint)-maxint div 2;
end;
A[N+1]:=0;
end;
{вывод массива на экран}
procedure Print(const A:TR; Header:string);
var
i:integer;
begin
writeln('*** ',Header,' ***');
for i:= 1 to N do write(A[i],'; ');
writeln;
end;
{упорядоченное добавление описания группы}
procedure AddGroup(Grp:TGroup);
var i:integer; B:TGroup;
begin
inc(GN);
if GN=1 then begin
G[GN]:=Grp;
end else begin
for i:=1 to GN do begin
if G[i].sum>Grp.sum then begin
B:=G[i];
G[i]:=Grp;
Grp:=B;
end else if i=GN then G[i]:=Grp;
end;
end;
end;
begin
randomize;
Init(R);
Print(R,'Before sorting');
{сканируем группы}
Gi.pos:=1; Gi.Sum:=0; Gi.Len:=0;
for i:=1 to N+1 do begin
{накапливаем сумму и считаем длину группы}
inc(Gi.len);
inc(Gi.sum, R[i]);
if R[i]=0 then begin {если обнаружен конец группы, то
добавляем группу в массив, и начинаем новую группу}
AddGroup(Gi);
Gi.pos:=i+1; Gi.Sum:=0; Gi.Len:=0;
end;
end;
{формируем новый массив, руководствуясь
упорядоченным списком групп}
k:=0;
for i:=1 to GN do for j:=1 to G[i].len do begin
inc(k);
R2[k]:=R[G[i].pos+j-1];
end;
{вывод результата}
Print(R2,'After sorting');
readln;
end.
- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
2)
Код: Выделить всё
const
N = 5;
M = 20;
type
TArr = array[1..N,1..M] of integer;
var
A:TArr;
B:TArr;
C:array[1..N] of integer;
i,j:integer;
{процедура вывода массива на экран}
procedure PrintArr(X:TArr; width:byte; Header:string);
var i,j:integer;
begin
writeln;
write('*** ',Header,' ***');
for i:=1 to N do begin
writeln; write('House',i:4,' ');
for j:=1 to M do write(X[i,j]:width);
end;
writeln;
end;
{процедура заполнения массива}
procedure FillArr(var X:TArr; min,max:integer);
var i,j:integer;
begin
for i:=1 to N do for j:=1 to M do X[i,j]:=min+random(max-min+1);
end;
begin
randomize;
FillArr(A,20,70); {квартиры от 20 до 70 м.кв.}
FillArr(B,1,5); {от 1 до 5 человек на квартиру}
PrintArr(A,3,'Square of flats');
PrintArr(B,2,'Persons per flat');
for i:=1 to N do begin
C[i]:=0;
for j:=1 to M do if A[i,j]/B[i,j]<7 then inc(C[i]);
end;
writeln;
writeln('Number of flats where the square is less 7sq.m per person:');
for i:=1 to N do begin
writeln('House',i:4,' - ',C[i],' flat(s)');
end;
readln;
end.