Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 11
1

Составить программу, которая создает и выводит на экран файл.

25.05.2009, 20:31. Показов 3671. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите пожалуйста сделать задачу, которая заключается в следующем ->
Составить программу, которая создает и выводит на экран файл ZARPL.DAT, компоненты которого имеют следующую структуру
-Табельный номер
-ФИО
-Сумма зарплаты
Выход из ввода, табельный номер=999.Выведите на экран табельные номера, ФИО и зарплату только тех, у кого зарплата превышает 100000.00 руб. Используйте оператор with


Вот код этой программы ->
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
procedure TForm1.Button3Click(Sender: TObject);
begin
  AssignFile(dat,DATNAME);
   {$I-}
    Append(dat);
    {$I+}
     if IOResult<>0 then
      begin
       buttonSelected := MessageDlg('Файл не был найден.'+#13+'Создать новый?',mtError, mbOKCancel, 0);
        if buttonSelected = mrOK then
         begin
          AssignFile(dat,DATNAME);
           {$I-}
           Rewrite(dat);
           {$I+}
            if IOResult<>0 then
             begin
              ShowMessage('Ошибка! Вот ее код: '+IntToStr(GetLastError));
              button4.Enabled:=false;
              button5.Enabled:=false;
              exit;
             end;
            end;
           end;
 if StrToInt(edit3.text)<999 then
  if IOResult=0 then
  begin
   button4.Enabled:=True;
   button5.Enabled:=True;
   writeln(dat,edit3.text);
   writeln(dat,edit4.text);
   writeln(dat,edit5.text);
  end;
 if StrToInt(edit3.text)>=999 then
  begin
   ShowMessage('Такого табельного номера нет!');
  end;
 CloseFile(dat);
end;
 
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ['0'..'9',#46,#8]) then Key := #0;
end;
 
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['а'..'я','А'..'Я',#46,#8,#32]) then Key := #0;
end;
 
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
  if not (Key in ['0'..'9',#46,#8]) then Key := #0;
end;
 
procedure TForm1.Button4Click(Sender: TObject);
begin
 AssignFile(dat,DATNAME);
   {$I-}
    Reset(dat);
     {$I+}
      if IOResult<>0 then
       begin
        MessageDlg('Ошибка доступа к файлу',mtError,[mbOk],0);
       end;
        if IOResult=0 then
       begin
      while not EOF(dat) do
       begin
        for q:=0 to 999 do
         begin
          readln(dat,ch1[q]);
         end;
        end;
       end;
        if IOResult=0 then
         begin
          for m:=0 to 999 do
           begin
           f:=f+1;
            if f=3 then
             begin
             f:=0;
              if (StrToInt(ch1[m])>100000) and (ch1[m]<>'') then
                begin
                 Memo1.Lines.Add(ch1[m-2]);
                 Memo1.Lines.Add(ch1[m-1]);
                 Memo1.Lines.Add(ch1[m]);
                end;
              end;
           end;
        end;
 CLoseFile(dat);
end;
 
procedure TForm1.Button5Click(Sender: TObject);
begin
 if DeleteFile(DATNAME) then
  begin
   ShowMessage('Файл успешно удален!');
   button4.Enabled:=false;
   button5.Enabled:=false;
  end;
end;
 
end.
вроде как все считает и выводит в Memo1, но пишет ошибку
is not valid integer value
Заранее спасибо!!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.05.2009, 20:31
Ответы с готовыми решениями:

Составить программу, которая создает и выводит на экран файл
Составьте программу, которая создает и выводит на экран файл AVANS.DAT, компоненты которого имеют...

составить программу которая создает файл
итак, сел разбираться с делфи, мне нужно создать программу, которая создает фаил RANDOM1.DAT,...

Составить программу, которая находит положительные элементы массива и выводит их на экран
Нужно написать программу в Borland Delphi 7. Составить программу,которая находит положительные...

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

13
КотЪ
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
26.05.2009, 13:55 2
В какой строке вызывается ошибка? Какие данные при этом вводили? Давайте больше информации, тут ведь не колдуны сидят
0
11 / 11 / 0
Регистрация: 09.04.2009
Сообщений: 65
26.05.2009, 14:28 3
скорее всего, ошибка в строке 84!
вот тут: StrToInt(ch1[m]) , вы уверены, что ch1[m] - есть число? думаю нет, так как следующая запись идет ch1[m]<>''
0
КотЪ
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
26.05.2009, 15:58 4
Да нет, там всё правильно. Хотя может среди введённых значений зарплаты есть не целое число? И вообще ch1[] лучше сделать вещественным, а не целым, раз это зарплата...
0
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 11
30.05.2009, 10:38  [ТС] 5
Данные были таковы
Delphi
1
2
3
4
5
6
7
8
const
  DATNAME='C:\ZARPL.dat';
 var
  dat:TextFile;
  buttonSelected, q,m: Integer;
  ch1: array [0..999] of string;
  ch3: string;
  f,h: real;
0
КотЪ
219 / 219 / 60
Регистрация: 26.05.2009
Сообщений: 688
30.05.2009, 22:39 6
"Данные" - это содержимое вашего файла .DAT, а не список переменных... Если где-то зарплата не целая, то этот (StrToInt(ch1[m])) оператор не пройдёт.
1
2 / 2 / 0
Регистрация: 20.04.2009
Сообщений: 13
30.05.2009, 23:03 7
на сколько я понял
при вот этом
Delphi
1
2
3
4
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ['0'..'9',#46,#8]) then Key := #0;
end;
ввести зарплату можно тока целым числом?

1
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
30.05.2009, 23:34 8
может ошибка происходит тут:
Delphi
1
if (StrToInt(ch1[m])>100000) and (ch1[m]<>'') then
Но причина в том, что записей меньше 1000. Кстати, в сообщении об ошибке две одинарные кавычки перед is not... ? Пустая строка вызывает ошибку в StrToInt.
Сорри, ноут уже пищит что акум сел. Переделанный код не успею выложить.
1
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 11
31.05.2009, 10:34  [ТС] 9
Да, там в ошибке пишет ->
"is not valid integer value
0
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
31.05.2009, 13:41 10
Цитата Сообщение от xdbit Посмотреть сообщение
на сколько я понял
при вот этом
Delphi
1
2
3
4
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ['0'..'9',#46,#8]) then Key := #0;
end;
ввести зарплату можно тока целым числом?

необязательно. #46 - это код точки.
Хотя, имхо, лучше сделать так:
Delphi
1
2
3
4
5
6
7
8
9
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
 if not (Key in ['0'..'9',',','.',#8]) then 
  begin
  Key := #0;
  beep;
  end else
   if Key in [',','.'] then Key:=DecimalSeparator;
end;
DecimalSeparator - константа из SysUtils, значение которой зависит от региональных настроек в виндовсе и представляет собой разделитель целых и дробных частей.
С этой поправкой программа всегда будет корректно обрабатывать ввод числа, даж если юзер ступит и забудет язык переключить при вводе числа на цифровой клаве (со мной такое часто ), а если введёт что-то совсем недопустимое - то возмутится биканьем.
При желании ещё можно добавить проверку на количество запятых и запрещать попытки поставить больше одной.
1
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 11
31.05.2009, 14:37  [ТС] 11
А как сделать
остановку чтения файла до того как он начнет считывать пустые строки?
0
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
31.05.2009, 14:48 12
А есть в этом смысл? А что если после пустой строки будет идти строка с нужным значением?
Лучше заменить это:
Delphi
1
2
3
4
5
6
if (StrToInt(ch1[m])>100000) and (ch1[m]<>'') then
 begin
 Memo1.Lines.Add(ch1[m-2]);
 Memo1.Lines.Add(ch1[m-1]);
 Memo1.Lines.Add(ch1[m]);
 end;
На это:
Delphi
1
2
3
4
5
6
7
if ch1[m]<>'' then
 if StrToInt(ch1[m])>100000 then
  begin
  Memo1.Lines.Add(ch1[m-2]);
  Memo1.Lines.Add(ch1[m-1]);
  Memo1.Lines.Add(ch1[m]);
  end;
1
0 / 0 / 0
Регистрация: 25.05.2009
Сообщений: 11
31.05.2009, 15:32  [ТС] 13
А как отладить считывание?
при чтении файла возникает ошибка
когда ch1[m] попадает на строку с буквами
0
UNIX-way
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
31.05.2009, 16:00 14
Тогда можно где-то повыше в программе описать функцию, которая будет проверять является ли данная строка числом. Например так:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
function IsStrNum(data:string):boolean;
var
 i:integer;
begin
result:=data<>'';
for i:=1 to length(data) do
 if not data[i] in ['0'..'9',',','.'] then
  begin
  result:=false;
  break;
  end;
end;
А затем изменить многострадальный кусок кода на такой:
Delphi
1
2
3
4
5
6
7
if IsStrNum(ch1[m]) then
 if StrToInt(ch1[m])>100000 then
  begin
  Memo1.Lines.Add(ch1[m-2]);
  Memo1.Lines.Add(ch1[m-1]);
  Memo1.Lines.Add(ch1[m]);
  end;
Добавлено через 5 минут 3 секунды
Кроме того, IOResult возвращает то, что от неё ожидают только один раз:
...A call to IOResult clears its internal error flag....
Потому, например вот в этом коде:
Delphi
1
2
3
4
5
if IOResult <> 0 then
 begin
 MessageDlg('Ошибка доступа к файлу',mtError,[mbOk],0);
 end;
if IOResult=0 then
последнее условие будет всегда истинным.
0
31.05.2009, 16:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.05.2009, 16:00
Помогаю со студенческими работами здесь

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

Составьте программу, которая создает файл, состоящий из пяти значений типа real
Составьте программу, которая создает файл, состоящий из пяти значений типа real. Тип record не...

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

Не могу понять.(Создать программу которая создает файл из неопределенного количества типа integer)
Тут задача мне была задана&quot;Создать программу которая создает файл из неопределенного количества...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru