Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2010, 18:43   #1
daniil2010
Пользователь
 
Регистрация: 29.03.2010
Сообщений: 12
Вопрос Pascal

Дан массив из N целых чисел. Его значения- только нули и единицы. Найти номер элемента, с которого начинается самая длинная последовательность одинаковых чисел.

Вот пробовал кое-что составить, но всё равно не то, что нужно
можеть быть есть более правильный алгоритм?

program nomer2;

var
c: array of real;
N, k, m, d, l: integer;
y: integer;
i: byte;
r: real;

begin
write( 'vvedite N=');
read(N);
setlength(c, n);


Randomize;
for i := 1 to n - 1 do

begin
y := Random(2); //здесь заполняю массив 1 и 0
write('c[', i, ']=');
c[i] := y;
writeln(y);
end;





c[0] := c[1];
k := 0; l := 1; m := 1;
for i := 2 to n - 1 do
begin

if c[i - 1] = c[i ] then
begin

begin
l := l + 1; // если элементы равны, то работает счетчик
m := l; // это нужно для сравнения
d := l;
r := c[i + 1 - l ]; // вычисляется позиция эл-та с которого начинается последовательность
end;
end
else
begin

if m >= k then //после выхода из сравнения, смотрим на наибольшую последовательность.Если новая больше то её переписываем вместо старой //
k := m;
d := k;
m := 1;
l := 1;
writeln([i + 1 - d ] );
r := c[i + 1 - d ];



end;
end;

writeln(d, ' раз повторяется символ ', r);
readln;



writeln('l=', l);
writeln('k=', k);
writeln('с позиции', [i + 1 - d], c[i + 1 - d] );

end.

Последний раз редактировалось daniil2010; 18.04.2010 в 20:01.
daniil2010 вне форума Ответить с цитированием
Старый 18.04.2010, 19:39   #2
vedro-compota
любитель-далеко не
Участник клуба
 
Аватар для vedro-compota
 
Регистрация: 13.04.2010
Сообщений: 1,156
По умолчанию Дружище))

напиши комментарии в коде) а то не только придумывать- как лучше приходиться ,но ещё и пытаться понять твою идею , а это тоже время))
против абортов=за + жизнь;.фкн вгу;_______________________мойблг
vedro-compota вне форума Ответить с цитированием
Старый 18.04.2010, 20:10   #3
ОДИНОЧЕСТВО В СЕТИ
Любопытная Вредина
Участник клуба
 
Аватар для ОДИНОЧЕСТВО В СЕТИ
 
Регистрация: 19.06.2009
Сообщений: 1,285
По умолчанию

Код:
var
  i,k:integer;
  m,j:integer;
    s:string;
begin
  {s:='00000000111111111110111111111010101010111111111100010';}
readln(s);
Writeln(s);
s:=s+' ';
  k:=1;m:=1;j:=1;
  for i := 2 to Length(s) do
    if s[i]=s[i-1] then  inc(k)
      else
        if s[i]<>s[i-1] then
          begin
            if k>=m then
              begin
                m:=k;
                j:=i-k;
              end;
            k:=1;
            end;
  writeln('pos=',j:4);
  readln;
end.
Дурь - это особая форма материи, которая не возникает ниоткуда и не исчезает никуда, а лишь переходит из одной головы в другую.

Последний раз редактировалось ОДИНОЧЕСТВО В СЕТИ; 19.04.2010 в 04:51.
ОДИНОЧЕСТВО В СЕТИ вне форума Ответить с цитированием
Старый 18.04.2010, 20:42   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Одиночество, позвольте маленькое замечание...

в решении, к сожалению, присутствует
традиционная для подобных алгоритмов ошибка -
конечная последовательность не проверяется...

попробуйте, например, на:
Код:
s:='00110111111';
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Pascal nes@ Помощь студентам 5 18.06.2010 23:00
а free pascal не читает задачи которые написаны на turbo pascal? demonara Паскаль, Turbo Pascal, PascalABC.NET 3 25.05.2009 16:28
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37