1 (*This file is part of <name prog> project
4 Copyright (C) 2009 Apkawa
6 This program is free software; you can redistribute it and/or
7 modify it under the terms of the GNU General Public License
8 as published by the Free Software Foundation; either version 2
9 of the License, or (at your option) any later version.
11 This program is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 GNU General Public License for more details.
16 You should have received a copy of the GNU General Public License
17 along with this program; if not, write to the Free Software
18 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
20 You can contact author by email apkawa@gmail.com
23 {$MODE TP} (* compiler flag for fpc *)
27 Дан список группы в 10 человек в виде
28 ФАМИЛИЯ ПОЛ РЕЗУЛЬТАТЫ_СЕССИИ
30 Данные в одной строке отделяются друг от друга пробелами.
35 Определить лидеров среди мужчин и женщин по успеваемости и их средний балл (у мужчин и женщин отдельно).
38 Список лидеров напечатать в виде:
39 Иванов 4455 ср.балл 4.5
40 Петрова 3554 ср.балл 4.3
41 Общий средний балл мужчин равен 4.2
42 Общий средний балл женщин равен 4.1
65 text_array
= array [0..MAX_SIZE
, 0..MAX_SIZE
, 0..MAX_SIZE
*2] of char;
66 index_array
= array [0..MAX_SIZE
, 0..MAX_SIZE
] of integer;
68 state
: integer; { 0,1,2,3 }
71 line_pos
, word_pos
: integer;
72 word_count
, space_count
, alpha_count
, alpha_word_count
: integer;
75 parsed_text
: text_array
;
78 assign( in_file
, path
);
86 alpha_word_count
:= 0;
93 if ch
in ['0'..'9'] then
96 if ch
in [chr(10), chr(13)] then
113 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
114 state
:= WATING_ALPHA
;
118 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
119 state
:= WATING_NUMBER
;
124 state
:= WATING_SPACE
;
129 state
:= WATING_END_LINE
;
144 alpha_word_count
:= alpha_word_count
+1;
145 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
146 state
:= WATING_ALPHA
;
150 alpha_word_count
:= alpha_word_count
+1;
151 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
152 state
:= WATING_NUMBER
;
157 index
[line_pos
,word_pos
]:= alpha_word_count
;
158 word_pos
:= word_pos
+1;
159 word_count
:= word_count
+ 1;
160 alpha_word_count
:= 0;
162 state
:= WATING_SPACE
;
166 index
[line_pos
,word_pos
]:= alpha_word_count
;
167 word_count
:= word_count
+ 1;
168 line_pos
:= line_pos
+1;
170 alpha_word_count
:= 0;
172 state
:= WATING_END_LINE
;
185 alpha_word_count
:= alpha_word_count
+1;
186 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
187 state
:= WATING_ALPHA
;
192 alpha_word_count
:= alpha_word_count
+1;
193 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
194 state
:= WATING_NUMBER
;
199 word_pos
:= word_pos
+1;
200 word_count
:= word_count
+ 1;
201 alpha_word_count
:= 0;
203 state
:= WATING_SPACE
;
208 word_count
:= word_count
+ 1;
209 line_pos
:= line_pos
+1;
210 alpha_word_count
:= 0;
212 state
:= WATING_END_LINE
;
217 index
[line_pos
,word_pos
]:= alpha_word_count
;
218 word_count
:= word_count
+ 1;
229 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
230 state
:= WATING_ALPHA
;
235 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
236 state
:= WATING_NUMBER
;
241 state
:= WATING_SPACE
;
246 line_pos
:= line_pos
+1;
248 alpha_word_count
:= 0;
249 state
:= WATING_END_LINE
;
264 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
265 state
:= WATING_ALPHA
;
270 parsed_text
[line_pos
,word_pos
,alpha_word_count
] := ch
;
271 state
:= WATING_NUMBER
;
276 state
:= WATING_SPACE
;
281 state
:= WATING_END_LINE
;
294 if state
= END_STATE
then
300 writeln( word_count
, word_pos
);
301 for i
:=0 to line_pos
-1 do
304 write( parsed_text
[i
,j
],' ');