IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сортировка, Помогите plz
Dima1111
сообщение 12.11.2009 18:55
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Помогите пожалуйста разобраться, каким образом можно реализовать на TP задачу:

Нужно написать программу, которая считывает из текстового файла информацию о сотрудниках и их зарплате и группирует записи по каждому сотруднику с последующим выводом их, подсчитав для каждого среднюю зарплату.
Буду очень благодарен за любую помощь, заранее спасибо.

Вот образец файла:
Январь
Александров В.П. 2750.23
Иванов С.А. 2214.04
Сергеев К.А. 3122.89
Февраль
Александров В.П. 2354.33
Сергеев К.А. 2921.19
Март
Александров В.П. 2755.23
Сергеев К.А. 3122.89
Иванов С.А. 2312.34

VVVVVVVVVVVVVVVVVVVVVVVVVVV

Александров В.П.
Январь 2750.23
Февраль 2354.33
Март 2755.23
средняя зарплата =2619.93

Иванов С.А.
Январь 2214.04
Февраль нет данных
Март 2312.34
средняя зарплата =2263.19

Сергеев К.А.
Январь 3122.89
Февраль 2921.19
Март 3122.89
средняя зарплата =3055.65
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
RathaR
сообщение 14.11.2009 21:38
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 346
Пол: Мужской
Реальное имя: Иван

Репутация: -  7  +


В общем объёмная програмка вышла smile.gif и глупостей в ней несчесть...
И вот еще что: писал на Turbo Delphi Explorer, так эта зараза игнорирует последние сроки в основной программе, сразу после процедуры Spisok перескакует в конец программы. Запустил в ТП - всё нормально, но прога пашет некоректно изза разных кодировок, неможет со строки правильно выделить стоимость, ибо я там ориентируюсь на '.', а при смене кодировки это уже не точка...а все русские слова в ТП переписывать заново нехотелось...
Вобщем прога поидее рабочая, но откомпилировать её полностью в TDE не удалось...

З.Ы. Старался писать так как писал бы год назад... со строками... для того чтобы она работала во входящем файле месяца должны идти по порядку, и нужно задать константу К - максимально возможное число сотрудников
{$APPTYPE CONSOLE}
program Yrodec;
const
digits:set of char=['0'..'9'];
K=6;
month:array[1..12] of string =(
'Январь','Февраль','Март','Апрель',
'Май','Июнь','Июль','Август',
'Сентябрь','Октябрь','Ноябрь','Декабрь'
);
var
F1,F2:text;
S:string;
I,J:integer;
spisok_shtata:array[1..K]of string;
zarplata:array[1..12,1..K]of real;

function select_name(S:string):string;
var
I:integer;
S_:string;
K:integer;
begin
I:=1;
K:=0;
while K=0 do
begin
if S[I] in digits then K:=I;
inc(I);
end;
S_:='';
for I:=K-2 downto 1 do
S_:= S[I]+S_;
select_name:=S_;
end;

function select_cost(S:string):real;
var
I:integer;
cost:real;
code:integer;
S_:string;
begin
for I:=1 to length(S) do
if (S[I] in digits) or((S[I]='.')and(S[I-1] in digits)and(S[I+1] in digits))then S_:=S_+S[I];
val(S_,cost,code);
select_cost:=cost;
end;

function stroka_month(S:string):boolean;
var
I:integer;
begin
stroka_month:=false;
for I:=1 to 12 do
if S=month[I] then stroka_month:=true;
end;

procedure Spisok;
var
I:integer;
S:string;
S_:string;
prisutstvie:boolean;
begin
while not eof(F1) do
begin
readln(F1,S_);
if not stroka_month(S_) then
begin
S:=select_name(S_);
prisutstvie:=false;
for I:=1 to K do
if spisok_shtata[I]=S then prisutstvie:=true;
if not prisutstvie then
begin
I:=1;
while spisok_shtata[I]<>'' do
inc(I);
spisok_shtata[I]:=S;
end;
end;
end;
end;

function nomber_of_month(S:string):integer;
var
I:integer;
begin
for I:=1 to 12 do
if month[I]=S then nomber_of_month:=I;
end;

function nomber_of_sotrudnik(S:string):integer;
var
I:integer;
begin
for I:=1 to K do
if select_name(S)=spisok_shtata[I] then nomber_of_sotrudnik:=I;
end;

procedure spisok_zarplat;
var
I:integer;
S:string;
S_:string;
begin
readln(F1,S);
S_:=S;
while not eof(F1) do
begin
S:=S_;
if stroka_month(S) then
begin
readln(F1,S_);
while not stroka_month(S_) do
begin
zarplata[nomber_of_month(S),nomber_of_sotrudnik(S_)]:=select_cost(S_);
readln(F1,S_);
end;
end;
end;
end;

procedure Obnulenie_spiska_shtata;
var
I:integer;
begin
for I:=1 to k do
spisok_shtata[I]:='';
end;

procedure Obnulenie_spiska_zarplat;
var
I:integer;
J:integer;
begin
for I:=1 to 12 do
for J:=1 to K do
zarplata[I,J]:=0;
end;

function Sr_arifm_sotrudnika(K:integer):real;
var
I:integer;
suma:real;
kol_vo:real;
begin
suma:=0;
for I:=1 to 12 do
begin
suma:=suma+zarplata[I,K];
if zarplata[I,k]<>0 then kol_vo:=kol_vo+1;
end;
Sr_arifm_sotrudnika:=suma/kol_vo;
end;

begin
assign(F1,'spisok.dat');
assign(F2,'spisok.sol');
reset(F1);
Obnulenie_spiska_shtata;
Obnulenie_spiska_zarplat;
spisok;
close(F1);
reset(F1);
spisok_zarplat;
close(F1);
rewrite(F2);
for I:=1 to K do
begin
writeln(F2,spisok_shtata[I]);
for J:=1 to 12 do
begin
writeln(month[J]);
writeln(zarplata[J,I]);
end;
writeln(Sr_arifm_sotrudnika(I));
end;
close(F2);
end.


Вход. файл
Январь
Андреев А.А. 54254
Сергеев С.С. 45468
Генадиев Г.Г. 42124
Борисов Б.Б. 154
Февраль
Андреев А.А. 4212
Сергеев С.С. 45124
Борисов Б.Б. 41211
Виталиев В.В. 1111
Март
Сергеев С.С. 45124
Борисов Б.Б. 41211
Апрель
Антонов А.А. 554
Май
Август
Сентябрь
Октябрь
Ноябрь
Декабрь



Сообщение отредактировано: Lapp - 15.11.2009 2:55


--------------------
Считающий себя единственым здравомыслящим человеком сумасшедший? Если да, возможно я псих...
Пусть умолкнет всякий критик!
Я - системный аналитик!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
andriano
сообщение 14.11.2009 22:35
Сообщение #3


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

Репутация: -  28  +


Цитата(RathaR @ 14.11.2009 21:38) *
Запустил в ТП - всё нормально, но прога пашет некоректно изза разных кодировок, неможет со строки правильно выделить стоимость, ибо я там ориентируюсь на '.', а при смене кодировки это уже не точка...
Это не кодировка. Это региональные настройки. Чтобы не иметь геморроя с насчитанными разными программами цифрами, я у себя в региональных настройках ОС меняю десятичный разделитель с запятой на точку.
Для Винды:
Contro, Panel -> Date, Time... -> Regional and Language Options -> Custimise -> Decimal Symbol
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
Dima1111   Сортировка   12.11.2009 18:55
RathaR   Для начала неплохо было бы уточнить входные данные...   12.11.2009 19:17
volvo   Ничего из вышеперечисленного не обязательно для то...   12.11.2009 20:52
RathaR   Ничего из вышеперечисленного не обязательно для т...   13.11.2009 0:40
volvo   Что именно? Умение программы работать с 12-ю месяц...   13.11.2009 0:55
RathaR   В основном, я о том, что , так как нету четкого по...   13.11.2009 1:39
Lapp   Я бы сказал так: нужны дополнительные сведения не ...   13.11.2009 2:25
RathaR   RathaR, возьмешься написать такого уродца? )) Ув...   13.11.2009 3:04
Lapp   это глупо, но тогда выбора небыло Возможно. Ну, ...   13.11.2009 3:11
RathaR   Ну, что - напишешь? А напишу :cool:   13.11.2009 3:20
RathaR   В общем объёмная програмка вышла :) и глупостей в ...   14.11.2009 21:38
andriano   Запустил в ТП - всё нормально, но прога пашет неко...   14.11.2009 22:35
Dima1111   Старался писать так как писал бы год назад... со ...   20.11.2009 2:01
Lapp   Я извиняюсь, немного подредактировал формат в сооб...   15.11.2009 2:57
Dima1111   Спасибо большое! Буду разбираться с кодом..   18.11.2009 19:59


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 23.06.2025 3:46
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"