An array of 3-digit numbers was given, it was necessary to find the sum of digits of each number and arrange them in descending order with their initial addresses. For example, at the beginning was the number 526, stood at the 5th place of the original array, the sum of its numbers is 13, it turned out to be the largest in the new array, but we must indicate its initial place, that is, "was at the 5th place of the original array".

program lab; const n=10; Type MyType=record number:integer; indexPrev:byte; end; Type ArrMyType = array[1..n] of MyType; var i,j: integer; a:array[1..n] of MyType; function f(x:integer):integer; var d,s: integer; begin s:=0; while x > 0 do begin d:= x mod 10; s:= s + d; x:= x div 10; end; f:=s; end; procedure swap(var x,y: integer); var t: integer; begin t := x; x := y; y := t end; begin writeln('Исходный массив'); for i:=1 to n do begin a[i].number:=random(100)+500; a[i].indexPrev:=i; write(i,' эл. = ',a[i].number,' '); end; writeln; writeln('Cумма цифр в числе,без сортировки'); for i:=1 to n do a[i].number := f(a[i].number); for i:=1 to n do write(' y ',i,' эл. = ',a[i].number, ' '); for i:=1 to n-1 do for j:=i+1 to n do if a[i].number < a[j].number then swap(a[i].number,a[j].number); writeln; writeln('Новый массив'); for i:=1 to n do write(a[i],' ','начальный номер = ') //???????????????????????? end. 

And how to display the initial place?

  • The one who wrote this code should certainly understand where to take the original place;) The swap procedure needs to be changed so that it does not exchange whole numbers, but the entire MyType record - MBo
  • write(a[i].number,' ','начальный номер = ', a[i].indexPrev); - slippyk

1 answer 1

 program sort; const N = 10; type Number = record Value: integer; Sum: integer; Index: integer; end; ArrayOfNumber = array [1..N] of Number; function SumOfDigits(num: integer): integer; var sum: integer; begin sum := 0; while (num > 0) do begin Inc(sum, num Mod 10); num := num Div 10; end; result := sum; end; procedure BubbleSort(var numbers: ArrayOfNumber); var i, j: integer; tmp: Number; begin for i := N - 1 downto 1 do begin for j := N - i downto 1 do begin if numbers[j].Sum < numbers[j + 1].Sum then begin tmp := numbers[j]; numbers[j] := numbers[j + 1]; numbers[j + 1] := tmp end; end; end; end; var numbers: ArrayOfNumber; i: integer; begin Write('Исходный массив:'); Randomize; for i := 1 to N do begin with numbers[i] do begin Value := Random(100, 999); Sum := SumOfDigits(Value); Index := i; Write(Value:4); end; end; WriteLn(); WriteLn('Результат:'); BubbleSort(numbers); for i := 1 to N do begin with numbers[i] do begin WriteLn(Value:4, ', SUM:', Sum:3, ', OLD:', Index:3); end; end; end. 

Conclusion :

 Исходный массив: 914 232 252 591 724 588 129 404 121 480 Результат: 588, SUM: 21, OLD: 6 591, SUM: 15, OLD: 4 914, SUM: 14, OLD: 1 724, SUM: 13, OLD: 5 129, SUM: 12, OLD: 7 480, SUM: 12, OLD: 10 252, SUM: 9, OLD: 3 404, SUM: 8, OLD: 8 232, SUM: 7, OLD: 2 121, SUM: 4, OLD: 9