![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Передо мной стоит простая задача:есть входной файл input. В первой строке написано число элементов массива, во второй - сами элементы массива. В третьей строке записано любое число. Я должен посчитать, сколько раз в массиве встречается число из третьей строки. Сама задача невероятно простая, но я не понимаю, как работать с файлами! Вот мой код:
Код:
procedure TForm1.FormCreate(Sender: TObject); var f:file; n,x,i,p,r:integer; a:array of integer; begin r:=0; assignfile(f,input.txt); //это строка 31 reset(f); readln(f,n); setlength(a,n); for i:=0 to n-1 do //это строка 35 read(f,a[i]); readln(f,p); read(f,x); closefile(f); for i:=0 to n do if a[i]=x then inc(r); assignfile(f,output.txt); rewrite(f); write(f,r); closefile(f); end; [Error] Unit1.pas(31): Record, object or class type required [Error] Unit1.pas(35): ';' expected but 'FOR' found В общем, объясните дураку, почему это не работает? |
|
#2
|
||||
|
||||
|
31 - строка должна быть в кавычках (апострофах, если точнее).
35 - "';' требуется, но 'FOR' найдено". Хотя не вижу причин для этой ошибки... |
|
#3
|
||||
|
||||
|
Цитата:
Код:
assignfile(f, 'output.txt'); З.Ы. Как-то забылось, что это текстовый файл Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f: TextFile;
sl: TStringList;
i,cnt: integer;
str,st: string;
begin
if FileExists('input.txt') then
begin
AssignFile(f,'input.txt');
Reset(f);
Readln(f, st);
Readln(f,str);
Readln(f, st);
CloseFile(f);
sl:= TStringList.Create;
sl.Text:= StringReplace(str,' ',#13#10,[rfReplaceAll,rfIgnoreCase]);
cnt:= 0;
for i:=0 to sl.Count-1 do if sl[i] = st then Inc(cnt);
sl.Free;
if FileExists('output.txt') then
begin
AssignFile(f,'output.txt');
ReWrite(f);
Write(f,cnt);
CloseFile(f);
end;
end;
end;Последний раз редактировалось Alegun, 23.03.2013 в 22:56. |
|
#4
|
|||
|
|||
|
С кавычками я пробовал писать. Ошибка теперь еще хуже:
[Error] Unit1.pas(33): Incompatible types: 'procedure, untyped pointer or untyped parameter' and 'Integer'. Что ему не нравится-то? |
|
#5
|
||||
|
||||
|
Исправленный пример
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f : TextFile;
Count,
Search,
I, J : Integer;
buf : array of Integer;
begin
AssignFile(f, 'input.txt');
Reset(f);
ReadLn(f, Count);
SetLength(buf, Count);
for I := 0 to Count - 1 do
Read(f, buf[i]);
ReadLn(f);
ReadLn(f, Search);
CloseFile(f);
J := 0;
for I := 0 to Count - 1 do
if buf[i] = Search then
inc(J);
AssignFile(f, 'output.txt');
Rewrite(f);
WriteLn(f, 'Совпадений найдено = ', J);
CloseFile(f);
end;input.txt Код:
16 25 64 78 82 62 58 25 21 22 33 23 53 22 65 26 22 22 Код:
Совпадений найдено = 3 |
|
#6
|
|||
|
|||
|
Попробовал Ваш вариант, работает. Единственное, что мне не понятно - почему моя программа не работает?
|
|
#7
|
||||
|
||||
|
В твоём варианте вместо TextFile используется File.
|