![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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. |