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

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

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

 
 Ответить  Открыть новую тему 
> Повторение Элемента, Задачка, помогите решить
Shtraf
сообщение 8.04.2012 23:54
Сообщение #1





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Gaur

Репутация: -  1  +


Найти максимальное кол-во и значение расположенных рядом одинаковых элементов массива.
Массив <= 10


Не могу дойти до алгоритма, по которому считать кол-во элементов выполняющих условие, так чтобы, если есть ряд длинней предыдущего, он считался заново и сохранить повторяющееся значение.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 9.04.2012 5:31
Сообщение #2


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Shtraf @ 9.04.2012 0:54) *
дойти до алгоритма, по которому считать кол-во элементов выполняющих условие, так чтобы, если есть ряд длинней предыдущего, он считался заново и сохранить повторяющееся значение.


Как-то так:
const
m= 30;

var
a: array[1..m] of integer;
i,s,x,l: integer;

begin
Randomize;
for i:=1 to m do a[i]:= Random(4);
for i:=1 to m do write(a[i]:2);
writeln;
s:= 1;
x:= s;
l:= 1;
for i:=2 to m do
if a[i]<>a[s] then begin
if i-s>l then begin
x:= s;
l:= i-s
end;
s:= i;
end;
writeln('longest sequence consists of ',l,' numbers ',a[x],', starting at ',x,' pos');
readln
end.


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shtraf
сообщение 9.04.2012 18:45
Сообщение #3





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Gaur

Репутация: -  1  +


Логическая ошибка идёт.
Если в конце поставить, к примеру, подряд 4 одинаковых значения, выдаёт 2 значения подряд большее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 9.04.2012 19:14
Сообщение #4


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
Если в конце поставить, к примеру, подряд 4 одинаковых значения
этот вариант приведенным выше кодом не охватывается. Завершающая последовательность не проверяется, т.к. условие a[ i ] <> a[s] не выполняется. Исправить можно так:
  for i := 2 to m + 1 do
if (i = m + 1) or (a[i] <> a[s]) then // именно в таком порядке, сначала условие i = m + 1
begin

если поменять условия местами - вылет за пределы массива гарантирован.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shtraf
сообщение 9.04.2012 20:04
Сообщение #5





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Gaur

Репутация: -  1  +


Сделал. Идёт не просчёт 1 элемента
тоесть, если все элементы одинаковые то она даёт на 1 меньше. Сейчас проверю (я поменял вод данных (вод вручную не больше 10)). Это ведь не должно влиять на результат?

Добавлено через 12 мин.
НУ вот она:



program LongestNear;
const
m=10;
var
a: array[1..m] of integer;
i,s,x,l,N: integer;
begin
writeln('nahozhdenie samoj dlinoj cepochki povtorenij');
{Wwod masiva}
repeat
write('Zadajte chislo elementov v massive (1..',
m,') ');
readln(N);
if (N <= 0) or (N > m) then
writeln('vi oshiblis! Povtorite!');
until (N > 0) and (N <= m);
for i := 1 to N do
begin
write('Zadajte element N',i,' ');
readln(a[i])
end;
{nahozhdenie rezultata}
s:= l;
x:= s;
l:= l;
for i:= 2 to N+1 do
if (i=N+1) or (a[i]<>a[s]) then
begin
if i-s>l then
begin
x:= s;
l:= i-s
end;
s:= i;
end;
writeln('bolshee kol-vo elementov r9dom ',l,'element',a[x]);
end.



Добавлено через 6 мин.
Пример: если N=5
a[1]=a[2]=a[3]=a[4]=a[5]=4
цепочка = 4 значение 4


Сообщение отредактировано: Shtraf - 9.04.2012 20:18
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shtraf
сообщение 9.04.2012 21:22
Сообщение #6





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Gaur

Репутация: -  1  +


 
const
MaxSize = 10;
var
A: array [1..MaxSize] of Integer;
N: Integer;
I: Integer;
R: Integer;
V: Integer;
Z: Integer;
{ я пропустил ввод данных что бы лишнее не писать тут, а так он такой же как и тот что я чуть выше писал}
R:=0;
V:=0;
if N=1 then
begin
V:=1;
Z:=A[1];
end;
for I:=1 to N do
if (I>1) and (I<N) then
begin
if Z=A[I-1] then
R:=0;
if A[I]=A[I+1] then
R:=R+1
else
if (A[I]=A[I-1]) and (A[I]<>A[I+1]) then
begin
R:=R+1;
if V=0 then
begin
V:=R;
Z:=A[I]
end
else
if R>V then
begin
V:=R;
Z:=A[I];
end;
end;
end
else
begin
if (I=1) and (A[I]=A[I+1]) then
R:=R+1
else
if (I=N) and (A[I]=A[I-1]) then
begin
R:=R+1;
if R>V then
begin
V:=R;
Z:=A[I];
end;
end;
end;
{ Вывод результата}
writeln('Максимальная цепочка = ', V,' при значение = ',Z);
readln;
end.



Вот то что я сотворил... но я делал на том что знаю (while я не умею им пользоваться у меня с ним не получилось)

Добавлено через 10 мин.
В принципе вопрос исчерпан, но буду очень рад советам, потому что я только начал осваивать всё это.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
IUnknown
сообщение 9.04.2012 23:04
Сообщение #7


a.k.a. volvo877
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской

Репутация: -  627  +


Цитата
Сделал. Идёт не просчёт 1 элемента
тоесть, если все элементы одинаковые то она даёт на 1 меньше
Ну неправда же, зачем так откровенно врать?
const
m= 5;
var
a: array[1..m] of integer =
// (1, 1, 1, 1, 5, 2, 3, 6, 3, 3);
(1, 1, 1, 1, 1);

i,s,x,l: integer;
begin
// Randomize;
// for i:=1 to m do a[i]:= Random(4);
for i:=1 to m do
write(a[i]:2);
writeln;
s:= 1;
x:= s;
l:= 1;
for i := 2 to m + 1 do
if (i = m + 1) or (a[i] <> a[s]) then
begin
if i-s>l then
begin
x:= s;
l:= i-s
end;
s:= i;
end;
writeln('longest sequence consists of ',l,' numbers ',a[x],', starting at ',x,' pos');
readln
end.

Внезапно:
 1 1 1 1 1
longest sequence consists of 5 numbers 1, starting at 1 pos

. Если бы давало неправильный результат - я бы, наверное, не стал отвечать на форуме?

Аналогично: (Показать/Скрыть)


Сообщение отредактировано: IUnknown - 9.04.2012 23:11
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Lapp
сообщение 10.04.2012 2:31
Сообщение #8


Уникум
*******

Группа: Модераторы
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Цитата(Shtraf @ 9.04.2012 19:45) *
Логическая ошибка идёт.

Да, верно, этот момент я не учел.. ((
Спасибо! smile.gif
Обоим по +1 - Штрафу за обнаружение, IUnknown за исправление!


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Shtraf
сообщение 10.04.2012 17:23
Сообщение #9





Группа: Пользователи
Сообщений: 5
Пол: Мужской
Реальное имя: Gaur

Репутация: -  1  +


Цитата(IUnknown @ 9.04.2012 23:04) *


Если бы давало неправильный результат - я бы, наверное, не стал отвечать на форуме?



Да, прошу прощения, это я код не правильно переписал. вместо S:=1 и l:=1 написал вместо 1 L
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 20.04.2024 0:43
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"