Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Задача последовательности. 
:(
    Опции темы
nik118
Дата 7.1.2005, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 7.1.2005
Где: Латвия

Репутация: нет
Всего: нет



Дана задача:
Дана последовательность целых чисел. Построить последовательность номеров позиций, откуда начинаются последовательности, состоящие как минимум из 2-х единиц подряд.
Вход
В каждой строке входа дано по одному элементу исходной последовательности. Признак конца последовательности - 0.
Выход
В каждую строку выхода вывести по одному элементу результирующей последовательности. Заключительный нуль в результат не выводить.
Пример
Вход:

4
1
1
1
6
1
2
1
1
0
Выход:

2
8
-----------------------------------------------------
Я тут папробывал написать код ,но он не работает?
Если его запустить без использование массива то он выдаёт только последее значение, а по условию нужно каждый номер последовательности вывести в новую строку.

Код

var s:string;
var k,i,j:integer;
rez: array[1 .. 20] of integer;
rez1: array[1 .. 20] of string;

begin
ReadLn(s);

for i:=1 to Length(s) do
begin
  if s[i+1]=s[i] then
  begin
j:=0;
     rez[j]:=i;
     j:=j+1;
 

end;
end;
for k:=0 to 20 do

WriteLn(rez[k]);
end.

PM MAIL ICQ   Вверх
Zero
Дата 7.1.2005, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Кароче переделывать твой код бесполезно, там полностью всё не так:
1. Раздел Var пишется только один раз в головной программе, он предназначен для описания всех типов.
2. Не вижу смысла использовать строковый массив, ведь у тебя и числа и позиции целого типа.
Предлагаю такое решение:
Код

program pr;
Const
 Nmax=100;
Var
 i,j,m:integer;
 a,b:array[1..Nmax] of integer;
Begin
 writeln('Вход:');
 i:=1;
 Repeat
   readln(m);
   a[i]:=m;
   i:=i+1;
 Until m=0;

 i:=1; j:=1;
 Repeat
   if a[i]=1 then
     begin
       if a[i+1]=1 then
         begin
           b[j]:=i;
           j:=j+1;
         end;
       repeat
         i:=i+1;
       until a[i]<>1;
     end
   else i:=i+1;
 Until a[i]=0;

 writeln('Выход:');
 for i:=1 to j-1 do
   writeln(b[i]);
End.

PM MAIL ICQ   Вверх
volvo877
Дата 7.1.2005, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



nik118
Цитата(nik118 @ 7.1.2005, 14:47)
В каждой строке входа дано по одному элементу исходной последовательности.

Как-то не вяжется с тем, что ты пытаешься сделать в программе:
Код

begin
 ReadLn(s);
 ...
 {больше ввод не происходит}
end.

То есть, один ReadLn. Или ты пытаешься ввести строку вида '4111612110' сразу, если же нет, то как ты хочешь получить следующую строку входа?
PM MAIL   Вверх
Zero
Дата 7.1.2005, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(volvo877 @ 7.1.2005, 17:08)
как ты хочешь получить следующую строку входа?
Так как написано у меня. smile
PM MAIL ICQ   Вверх
volvo877
Дата 7.1.2005, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 2
Всего: 116



Zero
То что у тебя - понятно... smile Но как nik118 пытался сделать это изначально, вот в чем вопрос ... Я кстати, предлагал ему такое решение, но оно его не устроило...
PM MAIL   Вверх
Zero
Дата 7.1.2005, 17:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(volvo877 @ 7.1.2005, 17:16)
Но как nik118 пытался сделать это изначально, вот в чем вопрос ...
Незнаю, я не телепат. smile
Цитата(volvo877 @ 7.1.2005, 17:16)
Я кстати, предлагал ему такое решение, но оно его не устроило...
Незнаю где ты ему предлагал, пусть тогда скажет что ему тут не понравилось.
PM MAIL ICQ   Вверх
Q
Дата 23.1.2005, 10:39 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Код

procedure Output(var A: mas; n: integer);
var
 j,k: integer;
begin
 j:=1;
 repeat
   if A[j] = 1 then
   begin
     k:=j;
     while A[j] = 1 do Inc(j);
     if j-k > 1 then Writeln(IntToStr(k));
   end;
   Inc(j);
 until j >= n;
end;

  Вверх
Druidik25
  Дата 2.2.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 64
Регистрация: 27.1.2005
Где: Киев, Украина

Репутация: нет
Всего: нет



Сложно определить чего тут все добиваются, если чисел больше 500?. Написано же заканчиваются 0!!!
Zero, вот правильно написал, но зачем усложнять жизнь - вся программа пишется при пятерых переменных и массивом. И всё решается одним цыклом для ввода данных и одним для вывода.

Код

program kvs;
var mas:array[1..100] of integer;
     s,a,b,i,k:integer;
begin
i:=0;                 //Номер результата
s:=0;                //Количество встретившихся 1
a:=0;                //Номер начала появляющихся 1
k:=0;                //Номер по порядку введенного числа

repeat
 readln(b);            //Число ввода
 k:=k+1;                //Номер числа увеличился
 if b=1 then begin
  if s=0 then a:=k; //Запомнили появление 1
  s:=s+1;               //Количество 1 увеличилось на 1
 end else begin
                          //Единицы закончились - пора чего-то с ними делать.
  if s>1 then begin
                          //Количество "1" больше 1 тогда записываем в результаты
    i:=i+1;           //Увеличиваем номер результата
    mas[i]:=a;     //Записываем результат
    a:=0;             //Номер начала появлений 1 обнуляем
    s:=0;             //Количество, тоже, обнуляем.
  end;
 end;
until b=0;

//Вывод результата:
for k:=1 to i do begin
 writeln('Результат=',mas[k]);
end;
end;



Добавлено @ 16:57
Цитата(Zero @ 7.1.2005, 16:29)
1. Раздел Var пишется только один раз в головной программе, он предназначен для описания всех типов.

С этим я не согласен, Паскаль позволяет VAR писать хоть перед каждым новым объявлением переменной.
PM MAIL ICQ   Вверх
Zero
Дата 6.2.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Цитата(Druidik25 @ 2.2.2005, 16:51)
С этим я не согласен

Хм... Точно, я до этого так не эксперементировал.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0496 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.