![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
![]() В анкетах сотрудников некоторого учреждения имеются следующие сведения: фамилия, имя, отчество,год рождения, должность(мастер, инженер, рабочий), стаж, образование. Вывести фамилии, имена и отчества мастеров с высшим образованием и вычислить их средний стаж.
Ввод файла нужен из блокнота: Ivanov Igor Bor 1970 master 20 vishee Petrov Sergey Ser 1966 master 3 vishee Но чтобы я не вводил, результат одинаковый: Нет мастеров с высшим образованием. В чем ошибка? Вот программа: Код:
program Project2; {$APPTYPE CONSOLE} uses SysUtils; type sved=record {zapis} fam:string[10]; {polia zapisi} im:string[10]; ot:string[10]; god:word; dol:string[10]; staj:real; obr:string[10]; end; var b:sved; {peremen tipa zapis} k:integer; {kol} sr:real; {sred staj } f:file of sved; {tipizip file } imf:string[25]; {imia file} begin {glav progr} writeln('Vvedite imia file'); readln(imf); {vvod imia file} assignfile(f,imf); {svias fil peremen s imen file} {$I-} reset(f); {$I+} if ioresult=2 then {result prover suchestv file} writeln('File net') else begin k:=0; sr:=0; while not eof (f) do {poka net konca file} begin read (f,b); {chiraem zapis is file} with b do begin if (dol='master') and (obr='vishee') then {prover uslov} begin k:=k+1; {kol udovl uslov} sr:=sr+staj; {summ staj udovl uslov} Writeln(fam:10,im:10,ot:10); {vivod udovl uslov} end; end; end; if k=0 then writeln('Net masterov s vishim obrazov') else begin writeln('Kol-vo masterov s vishim obrazov=',k); sr:=sr/k; {sred staj udovl uslov} writeln('Sred staj masterov s vishim obrazov=',sr:6:2); end; end; closefile(f); readln; end. Последний раз редактировалось Admin, 16.12.2014 в 20:50. |
#2
|
||||
|
||||
![]() Можно всю строчку проверить на if Pos('vishee', s) > 0
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#3
|
|||
|
|||
![]() Я не понял
|
#4
|
||||
|
||||
![]() Есть просто подозрение что obr = string[10], а при сравнении obr = 'vishee' т.е. string[6]
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
![]() Я проверил. Не помогает.
|
#6
|
||||
|
||||
![]() Покажите пжлст "файл из блокнота" для проверки
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#7
|
|||
|
|||
![]() Andrew Atcheson Ia 1980 master 5 vishee
And Atchen Sn 1980 master 5 vishee rew cheson In 1980 master 5 srednee |
#8
|
||||
|
||||
![]() Да нет, оказалось работает ваш код, всё дело в блокнотном файле, там записи не правильные.
Вот пример нормальной набивки данных, смотрите сами Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#9
|
|||
|
|||
![]() Я извиняюсь, но я не понял как мне вводить нужно данные , чтобы работала моя программа.
|
#10
|
||||
|
||||
![]() Выходит вам блокнот нужон
![]() Тогда замените клик кнопки на Код:
procedure TForm1.Button1Click(Sender: TObject); var f:file of sved; b:sved; i: integer; sl: TStrings; begin sl:= TStringList.Create; AssignFile(f, Edit8.Text); if FileExists(Edit8.Text) then Reset(f) else Rewrite(f); for i:= 0 to Memo1.Lines.Count-1 do begin sl.DelimitedText:=Memo1.Lines[i]; with b do begin fam := sl[0]; {polia zapisi} im := sl[1]; ot := sl[2]; god := StrToInt(sl[3]); dol := sl[4]; staj:= StrToFloat(sl[5]); obr := sl[6]; end; //seek (f, filesize(f)); Write(f, b); end; Closefile(f); sl.Free; end; Правило такое - одна строка в мемо это одна запись в файле, пример Цитата:
Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 17.12.2014 в 00:48. |