IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Операция с одномерным численным массивом, хелп!
сообщение
Сообщение #1


Гость






Задание: найти наибольшее количество цифр, идущих подряд.

Функция, использует переменные
ntemp - количество цифр в строке
temp - сам массив цифр



Function count(ntemp:byte; temp:massiv):byte;
Var i,t,c,max:byte;
Begin
max:=1;
For i:=1 to (ntemp-1) do if (temp[i]=temp[i+1]-1) then
begin
t:=i;
c:=1; while (t<ntemp) and (temp[t]=temp[t+1]-1) do
begin
if c>max then max:=c; else inc©; inc(t);
end;
i:=t;
end;
count:=max+1;
End;




Проблема в следующем: функция циклится в процессе For , несмотря на то, что i много больше ntemp, чего, я полагаю, быть не должно.


Если дана строка вида 12345000 или 765123400 то проблем нет - последовательность одна. А вот при сравнении максимума все зависает.

Замечу, что пробовал не один алгоритм - эффект идентичный.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Во-первых, ты бы ПОЛНОСТЬЮ программу приводил, потому как кто его знает, КАК ты вызываешь, и ЧТО именно? А во вторых - сам виноват:
...
i := t;
...
это внутри цикла по i ??? blink.gif Чего ж ты ждешь от программы, когда пользуешься средствами, которыми Borland пользоваться не рекомендует?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






ну могу полностью программу...

Дан текстовый файл 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;

Function count(ntemp:byte; temp:massiv):byte;
Var i,t,c,max:byte;
Begin
max:=1;
For i:=1 to (ntemp-1) do if (temp[i]=temp[i+1]-1) then
begin
t:=i;
c:=1; while (t<ntemp) and (temp[t]=temp[t+1]-1) do
begin
if c>max then max:=c; else inc©; inc(t);
end;
i:=t;
end;
count:=max+1;
End;

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.

 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






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


Гость






Да, большое спасибо, самое главное увидел.
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.03.2024 19:03
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name