Проблема в следующем: функция циклится в процессе For , несмотря на то, что i много больше ntemp, чего, я полагаю, быть не должно.
Если дана строка вида 12345000 или 765123400 то проблем нет - последовательность одна. А вот при сравнении максимума все зависает.
Замечу, что пробовал не один алгоритм - эффект идентичный.
volvo
5.03.2007 17:42
Во-первых, ты бы ПОЛНОСТЬЮ программу приводил, потому как кто его знает, КАК ты вызываешь, и ЧТО именно? А во вторых - сам виноват:
... i := t; ...
это внутри цикла по i ??? Чего ж ты ждешь от программы, когда пользуешься средствами, которыми Borland пользоваться не рекомендует?
Гость
5.03.2007 17:49
ну могу полностью программу...
Дан текстовый файл f, состоящий из нескольких строк. В каждой строке найти наибольшее количество цифр, идущих подряд. Из этих значений сформировать файл h.
А что же насчет изменения i - так другие мысли на ум не приходят, как это решать...
Program tip2; Uses crt; Type file1=text; file2=file of byte; massiv=array[0..10] of byte; Var H:file2; F:file1; Fname:string; s:byte; re,n:massiv;
Procedure Input(Var F:file1; Fname:string; Var s:byte; Var n:massiv); Var x,i,j:byte; Begin clrscr; Write('Input/filename: '); Readln(fname); Assign(F,fname); ReWrite(F); Append(F); Write('Input/count/strings: '); Readln(s); For j:=1 to s do Begin Write('Input/count/elements: '); Readln(n[j]); Writeln('String ',j,#10,#13,'!start'); For i:=1 to n[j]-1 do Begin write(i,') '); Readln(x); Write(F,x,' '); End; Write(n[j],') '); Readln(x); Writeln(F,x); Writeln('!end'); End; Close(F); End;
Procedure mathpart(Var F:file1;Var re:massiv; s:byte; n:massiv); var i,j,x,ntemp:byte; temp:massiv; Begin Reset(F); For j:=1 to s do begin for i:=1 to (n[j]-1) do Begin Read(F,x); temp[i]:=x; End; Readln(F,x); temp[n[j]]:=x; ntemp:=n[j]; re[j]:=count(ntemp,temp); End; Write('Output/count: '); for j:=1 to s do write(re[j],' '); Writeln; Close(F); readkey; End;
procedure Output(Var H:file2; s:byte; re:massiv); Var j:byte; Begin Write('Input/filename: '); Readln(fname); Assign(H,fname); ReWrite(H); Reset(H); Write('Output/file/count: '); For j:=1 to s do begin write(H,re[j]); write(re[j],' '); end; Close(H); readkey; End;
Begin Input(F,Fname,s,n); mathpart(F,re,s,n); output(H,s,re); End.
volvo
5.03.2007 17:58
function get_count(s: string): integer; var i, count, max: integer; begin s := s + ' '; count := 1; max := 0; for i := 2 to length(s) do begin if s[i] = s[i - 1] then inc(count) else begin if max < count then max := count; count := 1; end end; get_count := max; end;
begin writeln(get_count('12333445678')); writeln(get_count('1010101888878888098')); end.
Идея понятна?
Гость
5.03.2007 18:12
Да, большое спасибо, самое главное увидел.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.