update
[archive.git] / Apkawa / Study / pascal / archive / job1_1 / job1_1.pas
blob729a46d02266e171721a4afa838df143b79533ad
1 (*This file is part of <name prog> project
3 job 1.1
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 *)
25 program job_1_1;
27 Дан список группы в 10 человек в виде
28 ФАМИЛИЯ ПОЛ РЕЗУЛЬТАТЫ_СЕССИИ
29 15 симв 1 симв 4 симв
30 Данные в одной строке отделяются друг от друга пробелами.
31 Например:
32 Иванов м 4455
33 Петрова ж 3554
34 ………………………….
35 Определить лидеров среди мужчин и женщин по успеваемости и их средний балл (у мужчин и женщин отдельно).
38 Список лидеров напечатать в виде:
39 Иванов 4455 ср.балл 4.5
40 Петрова 3554 ср.балл 4.3
41 Общий средний балл мужчин равен 4.2
42 Общий средний балл женщин равен 4.1
45 const
46 path = 'job1_1.data';
48 ALPHA = 1;
49 NUMBER = 2;
50 SPACE = 3;
51 OTHER = 4;
52 END_LINE = 5;
53 END_FILE = 6;{26}
55 START_STATE = 1;
56 WATING_ALPHA = 2;
57 WATING_NUMBER = 3;
58 WATING_SPACE = 4;
59 WATING_END_LINE = 5;
60 END_STATE = 6;
62 MAX_SIZE = 255;
64 type
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;
67 var
68 state: integer; { 0,1,2,3 }
69 symbol: integer;
70 i,j : integer;
71 line_pos, word_pos: integer;
72 word_count, space_count, alpha_count, alpha_word_count: integer;
73 ch: char;
74 in_file:text;
75 parsed_text: text_array ;
76 index: index_array;
77 begin
78 assign( in_file, path );
79 reset( in_file );
80 i := 0;
81 line_pos := 0;
82 word_pos := 0;
83 word_count :=0;
84 space_count := 0;
85 alpha_count := 0;
86 alpha_word_count := 0;
87 state := START_STATE;
89 while true do
90 begin
91 read( in_file, ch);
93 if ch in ['0'..'9'] then
94 symbol := NUMBER
95 else
96 if ch in [chr(10), chr(13)] then
97 symbol := END_LINE
98 else
99 if ch in [' '] then
100 symbol := SPACE
101 else
102 if eof(in_file) then
103 symbol := END_FILE
104 else
105 symbol := ALPHA;
107 case state of
108 START_STATE:
109 begin
110 case symbol of
111 ALPHA:
112 begin
113 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
114 state := WATING_ALPHA;
115 end;
116 NUMBER:
117 begin
118 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
119 state := WATING_NUMBER;
121 end;
122 SPACE:
123 begin
124 state := WATING_SPACE;
126 end;
127 END_LINE:
128 begin
129 state := WATING_END_LINE;
131 end;
132 END_FILE:
133 begin
134 state := END_STATE;
136 end;
137 end;
138 end;
139 WATING_ALPHA:
140 begin
141 case symbol of
142 ALPHA:
143 begin
144 alpha_word_count := alpha_word_count +1;
145 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
146 state := WATING_ALPHA;
147 end;
148 NUMBER:
149 begin
150 alpha_word_count := alpha_word_count +1;
151 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
152 state := WATING_NUMBER;
154 end;
155 SPACE:
156 begin
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;
163 end;
164 END_LINE:
165 begin
166 index[line_pos,word_pos]:= alpha_word_count;
167 word_count := word_count + 1;
168 line_pos := line_pos +1;
169 word_pos := 0;
170 alpha_word_count := 0;
172 state := WATING_END_LINE;
173 end;
174 END_FILE:
175 begin
176 state := END_STATE;
177 end;
178 end;
179 end;
180 WATING_NUMBER:
181 begin
182 case symbol of
183 ALPHA:
184 begin
185 alpha_word_count := alpha_word_count +1;
186 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
187 state := WATING_ALPHA;
189 end;
190 NUMBER:
191 begin
192 alpha_word_count := alpha_word_count +1;
193 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
194 state := WATING_NUMBER;
196 end;
197 SPACE:
198 begin
199 word_pos := word_pos +1;
200 word_count := word_count + 1;
201 alpha_word_count := 0;
203 state := WATING_SPACE;
205 end;
206 END_LINE:
207 begin
208 word_count := word_count + 1;
209 line_pos := line_pos +1;
210 alpha_word_count := 0;
211 word_pos := 0;
212 state := WATING_END_LINE;
214 end;
215 END_FILE:
216 begin
217 index[line_pos,word_pos]:= alpha_word_count;
218 word_count := word_count + 1;
219 state := END_STATE;
221 end;
222 end;
223 end;
224 WATING_SPACE:
225 begin
226 case symbol of
227 ALPHA:
228 begin
229 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
230 state := WATING_ALPHA;
232 end;
233 NUMBER:
234 begin
235 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
236 state := WATING_NUMBER;
238 end;
239 SPACE:
240 begin
241 state := WATING_SPACE;
243 end;
244 END_LINE:
245 begin
246 line_pos := line_pos +1;
247 word_pos := 0;
248 alpha_word_count := 0;
249 state := WATING_END_LINE;
251 end;
252 END_FILE:
253 begin
254 state := END_STATE;
256 end;
257 end;
258 end;
259 WATING_END_LINE:
260 begin
261 case symbol of
262 ALPHA:
263 begin
264 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
265 state := WATING_ALPHA;
267 end;
268 NUMBER:
269 begin
270 parsed_text[line_pos,word_pos,alpha_word_count] := ch;
271 state := WATING_NUMBER;
273 end;
274 SPACE:
275 begin
276 state := WATING_SPACE;
278 end;
279 END_LINE:
280 begin
281 state := WATING_END_LINE;
283 end;
284 END_FILE:
285 begin
286 state := END_STATE;
288 end;
289 end;
290 end;
292 end;
294 if state = END_STATE then
295 break
297 end;
298 close( in_file);
299 writeln( line_pos );
300 writeln( word_count, word_pos);
301 for i:=0 to line_pos-1 do
302 begin
303 for j:=0 to 2 do
304 write( parsed_text[i,j],' ');
305 writeln;
306 end;
308 end.