program z_1;
type
vedom = record
fio: string;
zar1: integer;
zar2: integer;
zar3: integer;
zar4: integer;
zar5: integer;
zar6: integer;
zar7: integer;
zar8: integer;
zar9: integer;
zar10: integer;
zar11: integer;
zar12: integer;
end;
var
mas: array [1..10] of vedom;
n,i: integer;
procedure input;
begin
writeln('Работник №',i);
write('Введите ФИО: ');
readln(mas[i].fio);
write('Зароботная плата за январь: ');
readln(mas[i].zar1);
write('Зароботная плата за февраль: ');
readln(mas[i].zar2);
write('Зароботная плата за март: ');
readln(mas[i].zar3);
write('Зароботная плата за апрель: ');
readln(mas[i].zar4);
write('Зароботная плата за май: ');
readln(mas[i].zar5);
write('Зароботная плата за июнь: ');
readln(mas[i].zar6);
write('Зароботная плата за июль: ');
readln(mas[i].zar7);
write('Зароботная плата за август: ');
readln(mas[i].zar8);
write('Зароботная плата за сентябрь: ');
readln(mas[i].zar9);
write('Зароботная плата за октябрь: ');
readln(mas[i].zar10);
write('Зароботная плата за ноябрь: ');
readln(mas[i].zar11);
write('Зароботная плата за декабрь: ');
readln(mas[i].zar12);
writeln;
end;
procedure output;
begin
writeln(mas[i].fio:30, ' | ', mas[i].zar1, ' | ', mas[i].zar2, ' | ', mas[i].zar3, ' | ', mas[i].zar4, ' | ', mas[i].zar5, ' | ', mas[i].zar6, ' | ', mas[i].zar7, ' | ', mas[i].zar8, ' | ', mas[i].zar9, ' | ', mas[i].zar10, ' | ', mas[i].zar11, ' | ', mas[i].zar12);
end;
begin
writeln('Количество работников: ');
readln(n);
writeln;
writeln('Введите фамилию работников ');
for i:=1 to n do
input;
writeln;
writeln('Ведомость');
writeln('ФИО':30, ' | ', 'Зар. плата');
for i:=1 to n do
output;
end.
Как сделать сортировку значений заработных плат которые совпадают с соседями по ведомости в одном месяце. Как и что куда подставить?
Другие языки программирования и технологии
Как сделать сортировку значений заработных плат
Таком виде программы тебе прийдётся делать 12 процедур сортировки для каждого месяца по отдельности!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-первых: Если тебе нужно получить зарплату, скажем, за 10 месяц (который будет задан параметром) , то твои действия?
— Обрабатывать массив mas по параметру mas[i].zar10
… А для 3 месяца?
Значит zar1, zar2, …, zar12 нужно превратить в массив:
…
type vedom = recordfio : string;zar : array [1..12] of integer;end;
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-вторых: Как следствие вышесказанного, можно названия месяцев перенести в константы:
…
const MonthName : array [1..12] of String[8] = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
…
И переделать ввод зарплаты на цикл:
…
var Month : Byte;
…
for Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(mas[i].zar[Month]); end;
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-третьих: Использование глобальных переменных в подпрограммах — плохой тон. (Если где-то в программе возникнет необходимость переименовать переменную, то прийдётся весь код перелопачивать ;–) И вообще, проще передать процедуре ввода значение массива как переменную:
…
procedure Input(NumWorker : Byte; var Worker : Vedom);
var Month : Byte;
begin
WriteLn('Введите сведения о заработной плате работника № ', NumWorker);Write('Введите ФИО: '); ReadLn(Worker.fio);
for Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(Worker.zar[Month]); end;
end;
…
for i:=1 to n do Input(i, mas[i]); { Это вместо for i:=1 to n do input; }
…
Вот такая маленькая процедурка вместо исходной!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
В-четвёртых: Названия переменных нужно давать понятные! Чтобы в дальнейшем было самому понятно что и зачем в программе… И не забывать делать комментарии, которые в дальнейшем не будут заставлять тебя вспоминать что к чему.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Теперь вся твоя «новая» программа:
const MonthName : array [1..12] of String[8] = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
type tVedom = record
FIO : String;Salary : array [1..12] of Integer;
end;
type tArrVedom : array [1..30] tVedom;
{ Ввод сведений о заработной плате работника }
procedure Input(NumWorker : Byte; var Worker : tVedom);
var Month : Byte;
begin
WriteLn('Введите сведения о заработной плате работника № ', NumWorker);Write('Введите ФИО: '); ReadLn(Worker.fio);
or Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(Worker.zar[Month]); end;
end;
{ Процедура вывода ведомости о зарплате }
procedure Output(Num : Byte; Arr : tArrVedom);
var N, Month : Byte;
begin
WriteLn('Ведомость по зарплате работников: ');
Write('__________ФИО_________________ '); for Month := 1 to 12 do Write('|', MonthName[Month]:10); WriteLn;
for N := 1 to Nom do begin
Write(Arr[N].FIO:30); for Month := 1 to 12 do Write('|', Arr[N].Salary[Month]:10); WriteLn;
end;
end;
var NumEmpl : Byte; { Количество работников }
ArrVedom : tArrVedom;
i : Byte;
begin
Write('Количество работников: '); ReadLn(NumEmpl);
for i := 1 to NumEmpl do Input(i, ArrVedom[i]);
WriteLn;
Output(NumEmpl);
end.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Вот теперь можно попытаться сделать сортировку… Ибо все данные структурированы и организован доступ к всем значениям по месяцам в виде массива.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-первых: Если тебе нужно получить зарплату, скажем, за 10 месяц (который будет задан параметром) , то твои действия?
— Обрабатывать массив mas по параметру mas[i].zar10
… А для 3 месяца?
Значит zar1, zar2, …, zar12 нужно превратить в массив:
…
type vedom = recordfio : string;zar : array [1..12] of integer;end;
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-вторых: Как следствие вышесказанного, можно названия месяцев перенести в константы:
…
const MonthName : array [1..12] of String[8] = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
…
И переделать ввод зарплаты на цикл:
…
var Month : Byte;
…
for Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(mas[i].zar[Month]); end;
…
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Во-третьих: Использование глобальных переменных в подпрограммах — плохой тон. (Если где-то в программе возникнет необходимость переименовать переменную, то прийдётся весь код перелопачивать ;–) И вообще, проще передать процедуре ввода значение массива как переменную:
…
procedure Input(NumWorker : Byte; var Worker : Vedom);
var Month : Byte;
begin
WriteLn('Введите сведения о заработной плате работника № ', NumWorker);Write('Введите ФИО: '); ReadLn(Worker.fio);
for Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(Worker.zar[Month]); end;
end;
…
for i:=1 to n do Input(i, mas[i]); { Это вместо for i:=1 to n do input; }
…
Вот такая маленькая процедурка вместо исходной!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
В-четвёртых: Названия переменных нужно давать понятные! Чтобы в дальнейшем было самому понятно что и зачем в программе… И не забывать делать комментарии, которые в дальнейшем не будут заставлять тебя вспоминать что к чему.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Теперь вся твоя «новая» программа:
const MonthName : array [1..12] of String[8] = ('январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь');
type tVedom = record
FIO : String;Salary : array [1..12] of Integer;
end;
type tArrVedom : array [1..30] tVedom;
{ Ввод сведений о заработной плате работника }
procedure Input(NumWorker : Byte; var Worker : tVedom);
var Month : Byte;
begin
WriteLn('Введите сведения о заработной плате работника № ', NumWorker);Write('Введите ФИО: '); ReadLn(Worker.fio);
or Month := 1 to 12 do begin Write('Зароботная плата за ', MonthName[Month], ': '); ReadLn(Worker.zar[Month]); end;
end;
{ Процедура вывода ведомости о зарплате }
procedure Output(Num : Byte; Arr : tArrVedom);
var N, Month : Byte;
begin
WriteLn('Ведомость по зарплате работников: ');
Write('__________ФИО_________________ '); for Month := 1 to 12 do Write('|', MonthName[Month]:10); WriteLn;
for N := 1 to Nom do begin
Write(Arr[N].FIO:30); for Month := 1 to 12 do Write('|', Arr[N].Salary[Month]:10); WriteLn;
end;
end;
var NumEmpl : Byte; { Количество работников }
ArrVedom : tArrVedom;
i : Byte;
begin
Write('Количество работников: '); ReadLn(NumEmpl);
for i := 1 to NumEmpl do Input(i, ArrVedom[i]);
WriteLn;
Output(NumEmpl);
end.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Вот теперь можно попытаться сделать сортировку… Ибо все данные структурированы и организован доступ к всем значениям по месяцам в виде массива.
ой Да я уже не помню .
Похожие вопросы
- У кого есть программа по распределению заработную плату по объемам работ. (Зарплата+премия)
- СРОЧНО ПОМОГИТЕ, ПОЖАЛУЙСТА . Минимальную заработную плату как найти ?
- С++. Как сделать, чтобы значение массива, созданного в структуре изменялось в другой процедуре?
- Изучил несколько простых алгоритмов сортировки, осталось изучить быструю и слияние, нужно ли вообще писать эти алгоритмы
- Сортировки, язык Си.
- C++ Сортировка в сортировке вектора экземпляров структуры
- Сортировка простыми вставками.
- Проблема с алгоритмом быстрой сортировкой С++
- Как написать макрос для Word 2003 чтобы выполнял сортировку чисел в квадратных скобках?
- Сортировка вставками и сортировка слиянием!