Какую операционную систему используешь? если Linux то: 1) g++ -c mprog.cpp -o mprog.o (-o "output" - файл вывода, -c означает "только компиляция", т.е. не связывать твой файл со сторонними билиотеками типа libc, получим просто файл с машинными командами особо ни к чему не привязанный ".o" - object file, если особо интересно, что же там лежит, можно вызвать "objdump -D mprog.o" либо g++ -S -masm=intel -O0 mprog.cpp, вывод будет в mprog.s) 2) g++ -c prog.cpp -o prog.o (то же самое) 3) g++ prog.o mprog.o -o prog (выполняем связывание двух обектных файлов между собой и со стандартными библиотеками, опять же новое содержимое можно посмотреть "objdump -D mprog") 4) ./prog - запустить твою программу и передать управление в начало функции main (и не важно, в каком файле она лежала, главное, чтобы была одна, хотя иначе шаг 3 выдаст ошибку) Если винда, то запусти поиск по диску С "mingw32-g++.exe" и через командную строку вызывай для него 1) ...путь...\mingw32-g++.exe -c mprog.cpp -o mprog.o 2) ...путь...\mingw32-g++.exe -c prog.cpp -o prog.o 3) ...путь...\mingw32-g++.exe prog.o mprog.o -o prog.exe 4) prog.exe
type R = record v: integer; p: integer end; mR = array[1..n] of R;
function SummOfDigits(n: integer): integer; { Сумма цифр в трехзначном числе } begin SummOfDigits := (n div 100) + ((n mod 100) div 10) + (n mod 10) end;
procedure Swp(var a, b: R); { Меняет местами элементы a и b } var t: R; begin t.v := a.v; t.p := a.p; a.v := b.v; a.p := b.p; b.v := t.v; b.p := t.p end;
procedure Shell(var a: mR; n: integer); { сортировка методом Шелла } var i, j, step: integer;
begin step := n div 2; while step > 0 do begin for j := n - step downto 1 do begin i := j; while i <= n - step do begin if a[i].v > a[i + step].v then Swp(a[i], a[i + step]); i := i + step end end; step := step div 2 end end;
var a: array[1..n] of integer; b: mR; i: integer;
begin Randomize; Writeln('*** Исходные элементы массива ***'); for i := 1 to n do begin a[i] := Random(900) + 100; b[i].v := SummOfDigits(a[i]); b[i].p := i; Write(a[i]:4) end; Writeln; Shell(b, n); Writeln('*** Упорядоченные по возрастанию суммы цифр элементы массива ***'); for i := 1 to n do begin Write(a[b[i].p]:4) end; Writeln end.