Народ, Помогите, ЗА СЕКСО

DELETED
3/14/2008, 11:46:44 PM
Если напишите небольшую програмку на ТурбоПаскале (она буквально на страничку), буду очень благодарен и одарю сексо!

Вот задачка, надо по не прогу написать.

Определение номера элемента, с которого начинается самая длинная последовательность четных чисел, расположенных в массиве подряд! Длина массива вводится с клавиатуры.

Печатать элементы массива по 6 штук, по формату :6
Тип данных: целые
-=Велла=-
3/15/2008, 1:19:41 AM
КОгда надо?
DELETED
3/15/2008, 6:39:06 PM
(-=Велла=- @ 14.03.2008 - время: 22:19) КОгда надо?
впринципе не срочно... неделя где-то.
-=Велла=-
3/15/2008, 8:24:50 PM
ок... я попробую... если до четверга не успею, то напишу...
DELETED
3/15/2008, 10:48:04 PM
(-=Велла=- @ 15.03.2008 - время: 17:24) ок... я попробую... если до четверга не успею, то напишу...
огромнейшее спсибо!
do-do
3/16/2008, 11:19:52 AM
Мож все ж сам сделаешь? Оно полезнее..
только помнить, что
X mod 2 = 0 если число четное... остальное в несколько строк делается
do-do
3/16/2008, 7:39:20 PM
Дело было вечером...да и делать было нечего
Вот решил порукоблудить по поводу
Турбо Паскаль года 4 в руках не держал, но нашел на компе free pascal - думаю палка одна (если стандарта придерживаться)


вот (вывод красивый ужо уж сам лепи)


program example;

Type
box=^y; (*Создаем список элементов*)
y=record
data: integer;
next:box;
end;

var
N:integer; (*Число элементов*)
Start:box; (*Указатель на начало массива*)
X,X1:box; (*вспомогательная ячейка*)
A:box; (*начало наибольшего массива*)
Nmax:integer;(*максимальное число четных элементов идущих подряд*)
I,J:integer; (*индексы*)
XX:integer; (*вспомогательная переменная*)

begin
(*Инициализация*)
Start:=Nil;A:=nil;Nmax:=0;j:=0;
(*Задаем массив - ни каких проверок. Минимальная длинна 2 элемента*)
writeln;write('Total=');readln(N);
read(XX);New(X);x^.next:=nil;x^.data: =XX;start:=x;
for i:=2 to N do (*Фишка в том, что на 1ый элемент мы ссылаемся в Start*)
begin
read(XX);new(x^.next);x:=x^.next;x^.next:=nil;x^.data: =XX;
end;
writeln;
x:=Start; (*начинаем обработку*)
for i:=1 to N do begin
if (x^.data <> 0) and (x^.data mod 2=0) then if j=0 then (*четно*)
begin x1:=x;Inc(j);end else Inc(j)
else (*не четно*)
if (j > 0) then if Nmax < j then begin Nmax:=j;A:=x1;j:=0;end;

x:=x^.next;
end;
writeln('Total-',Nmax);

for i:=1 to Nmax do begin write(A^.data: 8);A:=A^.next;end;


end.
-=Велла=-
3/16/2008, 9:34:56 PM
do-do, не прокатит.
тема лабораторной - массивы, а не записи.
do-do
3/16/2008, 10:14:03 PM
А где это написано ? что массивы :)
Слово Элемент массива я воспринимаю просто как индекс в памяти :)

Впрочем - Суть алгоритма от этого не изменяется :) Даже меньше писать. Впрочем - ТОТ же массив - это тот же список :) Определив 2-3 процедуры работы с индексом, (скрыв детали) имеем массив

Впрочем :) я не собираюсь дорогу переБегать :) Ваяй. Так - размялся, алгоритм вообщем то очевиден.
-=Велла=-
3/16/2008, 10:55:42 PM
А где это написано ? что массивы :)
да он мне просто методичку дал посмотреть :)

Да я то чо, я ничо )))) ПРосто мне самой заняться нечем.. сижу дома ж.. тупею.. а так хоть зарядка для мозгов будет ))))
do-do
3/16/2008, 11:17:34 PM
Студенты :) в методичке все обычно пишут ...а они не читают
mvf23
3/18/2008, 6:12:25 PM
(do-do @ 16.03.2008 - время: 16:39)Дело было вечером...да и делать было нечего
напоминает известную шутку про то как пишут программу "Hello World" люди с разным уровнем образования :) См. https://www.gnu.org/fun/jokes/helloworld.html

Студент первого курса, на котором обычно дают подобные задания должен решить его примерно так:

CODE
a- массив [1..n]

max_start := 0; {начальный элемент самой длинной последовательности}
max_len := 0;   {длина самой длинной последовательности}
cur_start := 0;   {начальный элемент текущей последовательности}

{ввод данных, сами пишите, влом}

for i:=1 to n do {перебираем}
begin
if (a[i] mod 2 = 0) then {если четный}
 begin
  if cur_start = 0 then {если первый в последовательности}
    begin
     cur_start := i;
     cur_len := 1;
    end
  else cur_len := cur_len + 1; {если не первый в последовательности}
 end
else {если нечетный, значит последовательность четных закончилась}
begin
 if cur_len>max_len then {сравниваем длину с максимальной, если длиннее то}
  begin
   max_start := cur_start; {устанавливаем новую максимальную}
   max_len := cur_len;
  end;
 cur_start := 0; {сбрасываем текущую}
 cur_len := 0;
end;
end;

{вывод данных, сами пишите, влом}


PS. кстати задача проверки четности числа эффективнее решается с помощью вот такой конструкции (a and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.

do-do
3/18/2008, 6:58:45 PM
(mvf23 @ 18.03.2008 - время: 15:12)

PS. кстати задача проверки четности числа эффективнее решается с помощью вот такой конструкции (a and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.
Гм...если учесть ручной ввод :) То большой выигрыш будет :)?

mod - нагляднее (в учебных целях наверное нормально) Хотя думаю если студент объяснит X and 1 = 0 четное - то зачет надо ставить сразу :)
mvf23
3/18/2008, 7:42:41 PM
(do-do @ 18.03.2008 - время: 15:58) (mvf23 @ 18.03.2008 - время: 15:12)

PS. кстати задача проверки четности числа эффективнее решается с помощью вот такой конструкции (a and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.
Гм...если учесть ручной ввод :) То большой выигрыш будет :)?

mod - нагляднее (в учебных целях наверное нормально)
вообще разница на два порядка :) примерно 3-4 такта процессора (в случае AND) против 150 (в случае MOD). Но это в такой программе никак ощущаться не будет, конечно если размер массива ограничен какими-то небольшими цифрами.

Однако студент, затрудняющийся написать такую лабу, вряд ли сможет веско объяснить преподавателю почему лучше использовать AND (да и не факт что преподаватель это знает :D). Да и ты прав - так оно нагляднее. Поэтому я и употребил в самой программе mod, про and написав в PS.



DELETED
3/19/2008, 1:12:59 AM
(do-do @ 16.03.2008 - время: 20:17) Студенты :) в методичке все обычно пишут ...а они не читают
Наверно я не(не хочу употреблять выражение туповат) не имею склонностей к изучению программирования. Прошустрил всю методичку. Три лабы зделал, на четвертой споткнулся. Эдакий у мну камень преткновения-массивы)))
DELETED
3/19/2008, 1:19:57 AM
(mvf23 @ 18.03.2008 - время: 15:12) Студент первого курса, на котором обычно дают подобные задания должен решить его примерно так:


a- массив


а описание переменных и массива-енто куда? точнее как? там же вроде все variables описать нада.

Я ничего не понимаю!

*БЬЕТ СЕБЯ ГОЛОВОЙ ОБ СТОЛ!
-=Велла=-
3/19/2008, 1:42:08 AM
vano-m.. говори спасибо mvf23. Я написала ввод-вывод (правла не в файл, а не экран)... Вот, держи...
CODE program var29;
uses crt;
var
a: array [1..100] of integer;
max_start,max_len,cur_start,cur_len:integer;
i:integer;
n:integer;
begin
clrscr;
max_start := 0; {начальный элемент самой длинной последовательности}
max_len := 0;   {длина самой длинной последовательности}
cur_start := 0;   {начальный элемент текущей последовательности}

{ввод данных}
writeln('Введите кол-во элементов массива');
readln (n);
writeln('Введите элементы массива');
for i:=1 to n do
readln(a[i]);

for i:=1 to n do {перебираем}
begin
if (a[i] mod 2 = 0) then {если четный}
begin
 if cur_start = 0 then {если первый в последовательности}
   begin
    cur_start := i;
    cur_len := 1;
   end
 else cur_len := cur_len + 1; {если не первый в последовательности}
end
else {если нечетный, значит последовательность четных закончилась}
begin
if cur_len>max_len then {сравниваем длину с максимальной, если длиннее то}
 begin
  max_start := cur_start; {устанавливаем новую максимальную}
  max_len := cur_len;
 end;
cur_start := 0; {сбрасываем текущую}
cur_len := 0;
end;
end;
{вывод результата по 9 элементов массива в строке}
for i:=1 to n do
begin
write (a[i]:6);
if i mod 9=0 then writeln;
end;
writeln;
writeln('Номер элемента, с которого начинается максимальная после-то четных чисел:',max_start);
readln;
end.
do-do
3/19/2008, 10:41:36 AM
Что напрягает...что массивы предопределены :) (их размер) с указателями универсальнее - 9хотя конечно, опять же все в одном сегменте только)
DELETED
3/19/2008, 4:22:48 PM
А я... А я... А я паскаль не знаю! Напесал на си... :)

CODE int f ( int* pp, int n ) {
int* p = pp + n - 1;
int a = 0, b = 0, c = -1;
do { a = ((*p--) & 1) ? ( 0, b < a ? c = n, b = a : 0 ) : a + 1; } while ( n-- );
return a > b ? 0 : c;
}
-=Велла=-
3/19/2008, 7:09:39 PM
А кто нить на Прологе может напишет заодно lol.gif