Если напишите небольшую програмку на ТурбоПаскале (она буквально на страничку), буду очень благодарен и одарю сексо!
Вот задачка, надо по не прогу написать.
Определение номера элемента, с которого начинается самая длинная последовательность четных чисел, расположенных в массиве подряд! Длина массива вводится с клавиатуры.
Печатать элементы массива по 6 штук, по формату :6 Тип данных: целые
Это сообщение отредактировал vano-m - 14-03-2008 - 21:48
-=Велла=-
КОгда надо?
vano-m
QUOTE (-=Велла=- @ 14.03.2008 - время: 22:19)
КОгда надо?
впринципе не срочно... неделя где-то.
-=Велла=-
ок... я попробую... если до четверга не успею, то напишу...
vano-m
QUOTE (-=Велла=- @ 15.03.2008 - время: 17:24)
ок... я попробую... если до четверга не успею, то напишу...
огромнейшее спсибо!
do-do
Мож все ж сам сделаешь? Оно полезнее.. только помнить, что X mod 2 = 0 если число четное... остальное в несколько строк делается
do-do
Дело было вечером...да и делать было нечего Вот решил порукоблудить по поводу Турбо Паскаль года 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.
-=Велла=-
do-do, не прокатит. тема лабораторной - массивы, а не записи.
do-do
А где это написано ? что массивы :) Слово Элемент массива я воспринимаю просто как индекс в памяти :)
Впрочем - Суть алгоритма от этого не изменяется :) Даже меньше писать. Впрочем - ТОТ же массив - это тот же список :) Определив 2-3 процедуры работы с индексом, (скрыв детали) имеем массив
Впрочем :) я не собираюсь дорогу переБегать :) Ваяй. Так - размялся, алгоритм вообщем то очевиден.
Это сообщение отредактировал do-do - 16-03-2008 - 20:15
-=Велла=-
QUOTE
А где это написано ? что массивы :)
да он мне просто методичку дал посмотреть :)
Да я то чо, я ничо )))) ПРосто мне самой заняться нечем.. сижу дома ж.. тупею.. а так хоть зарядка для мозгов будет ))))
do-do
Студенты :) в методичке все обычно пишут ...а они не читают
Студент первого курса, на котором обычно дают подобные задания должен решить его примерно так:
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[i] and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.
Это сообщение отредактировал mvf23 - 18-03-2008 - 16:22
do-do
QUOTE (mvf23 @ 18.03.2008 - время: 15:12)
PS. кстати задача проверки четности числа эффективнее решается с помощью вот такой конструкции (a[i] and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.
Гм...если учесть ручной ввод :) То большой выигрыш будет :)?
mod - нагляднее (в учебных целях наверное нормально) Хотя думаю если студент объяснит X and 1 = 0 четное - то зачет надо ставить сразу :)
Это сообщение отредактировал do-do - 18-03-2008 - 17:36
mvf23
QUOTE (do-do @ 18.03.2008 - время: 15:58)
QUOTE (mvf23 @ 18.03.2008 - время: 15:12)
PS. кстати задача проверки четности числа эффективнее решается с помощью вот такой конструкции (a[i] and 1 = 0). Т.к. побитовое "и" всегда выполняется быстрее чем деление с остатком.
Гм...если учесть ручной ввод :) То большой выигрыш будет :)?
mod - нагляднее (в учебных целях наверное нормально)
вообще разница на два порядка :) примерно 3-4 такта процессора (в случае AND) против 150 (в случае MOD). Но это в такой программе никак ощущаться не будет, конечно если размер массива ограничен какими-то небольшими цифрами.
Однако студент, затрудняющийся написать такую лабу, вряд ли сможет веско объяснить преподавателю почему лучше использовать AND (да и не факт что преподаватель это знает :D). Да и ты прав - так оно нагляднее. Поэтому я и употребил в самой программе mod, про and написав в PS.
vano-m
QUOTE (do-do @ 16.03.2008 - время: 20:17)
Студенты :) в методичке все обычно пишут ...а они не читают
Наверно я не(не хочу употреблять выражение туповат) не имею склонностей к изучению программирования. Прошустрил всю методичку. Три лабы зделал, на четвертой споткнулся. Эдакий у мну камень преткновения-массивы)))
vano-m
QUOTE (mvf23 @ 18.03.2008 - время: 15:12)
Студент первого курса, на котором обычно дают подобные задания должен решить его примерно так:
[CODE] a- массив [1..n]
а описание переменных и массива-енто куда? точнее как? там же вроде все variables описать нада.
Я ничего не понимаю!
*БЬЕТ СЕБЯ ГОЛОВОЙ ОБ СТОЛ!
-=Велла=-
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
Что напрягает...что массивы предопределены :) (их размер) с указателями универсальнее - 9хотя конечно, опять же все в одном сегменте только)
JeyLo
А я... А я... А я паскаль не знаю! Напесал на си... :)
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; }
-=Велла=-
А кто нить на Прологе может напишет заодно
mvf23
QUOTE (JeyLo @ 19.03.2008 - время: 13:22)
А я... А я... А я паскаль не знаю! Напесал на си... :)
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; }
какой-то у тебя си не кашерный, ну т.е. круто конечно что в четыре строки, но совершенно не читабельно... :) Ты б ещё на каком-нибудь брэйнфаке написал или на другом эзотерическом :) Короче - ходи туды: http://esco.sourceforge.net/?page=elang Там и компилятор на все случаи жизни и ссылки правильные :) Будешь потом только на них программить :
Типо приходит чел и говорит "мне надо на паскале хеллоу ворлд написать", а ты ему "ну паскаля я не знаю, но вот тебе хеллоу ворлд на езыке OOK"
CODE
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook! Ook! Ook? Ook! Ook? Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook? Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook? Ook. Ook? Ook. Ook. Ook! Ook.
А поскольку этот самый Ook - является закосом под крики орангутанов то можно ещё попытаться эту программу озвучить и выложить в качестве мп3
Это сообщение отредактировал mvf23 - 19-03-2008 - 21:06
vano-m
Всем огромнейшее спасибо! Попробую в пятницу сдать Это чудо!
vano-m
QUOTE (-=Велла=- @ 18.03.2008 - время: 22:42)
uses crt;
clrscr;
а что это такое кста?
do-do
QUOTE (-=Велла=- @ 19.03.2008 - время: 16:09)
А кто нить на Прологе может напишет заодно
Надеюсь на Турбо :)?
Crt - стандартная библиотека (Турбо Паскаля) Помогает в быстром выводе например на монитор (там много всего)
clrscr - процедура из этой библиотеки - просто стирает экран от символов
mvf23
QUOTE (vano-m @ 19.03.2008 - время: 18:07)
QUOTE (-=Велла=- @ 18.03.2008 - время: 22:42)
uses crt;
clrscr;
а что это такое кста?
можно убрать, если сомневаешься или если боишься чуть-чуть "повыпендриваться". Будет работать и без этого. Нужно просто, чтоб экран очистить.
vano-m
QUOTE (mvf23 @ 19.03.2008 - время: 18:38)
QUOTE (vano-m @ 19.03.2008 - время: 18:07)
QUOTE (-=Велла=- @ 18.03.2008 - время: 22:42)
uses crt;
clrscr;
а что это такое кста?
можно убрать, если сомневаешься или если боишься чуть-чуть "повыпендриваться". Будет работать и без этого. Нужно просто, чтоб экран очистить.
всмысле при каждом новом запуске?
mvf23
QUOTE (vano-m @ 19.03.2008 - время: 18:46)
QUOTE (mvf23 @ 19.03.2008 - время: 18:38)
Будет работать и без этого. Нужно просто, чтоб экран очистить.
всмысле при каждом новом запуске?
ну видишь - команда clrcsr написана в самом начале программы. Значит перед тем как делать что-либо ещё программа будет очищать экран. Т.е. при каждом запуске.
vano-m
аа. понятно. спс.
впятницу отпишшусь о том, как прошло...
do-do
Я бы на твоем месте ПОПРОСИЛ АЛГОРИТМ разъяснить :) пох.. на не важные процедуры :)
Понял КАК ? Если понял - то иди сдавайся преподу, а ежли нет....то все ж спроси чего не понятно
vano-m
QUOTE (do-do @ 20.03.2008 - время: 08:20)
Я бы на твоем месте ПОПРОСИЛ АЛГОРИТМ разъяснить :) пох.. на не важные процедуры :)
Понял КАК ? Если понял - то иди сдавайся преподу, а ежли нет....то все ж спроси чего не понятно
единственный нюанс, это наскока я понял вывод результатов должен осуществляться в .txt файл вроде.
-=Велла=-
vano-m, я ж тебя спрашивала об этом... щас сделаю.... ВОт
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; f:text; {текстовый файл} begin clrscr; assign (f,'res.txt'); {связали файл f с файлом на диске res.txt} rewrite(f); {открыть файл для записи} 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 (f, a[i]:6); if i mod 9=0 then writeln; end; writeln; writeln(f,'Номер элемента, с которого начинается максимальная после-то четных чисел:',max_start); readln; close(f); {закрыть файл} end.
Это сообщение отредактировал -=Велла=- - 21-03-2008 - 00:09
mvf23
-=Велла=-, чуть-чуть недосмотрела: вместо
CODE
if i mod 9=0 then writeln;
нужно
CODE
if i mod 9=0 then writeln(f);
А вообще молодец. Я бы поленился :)
vano-m, будешь с Веллой расплачиваться ещё год :)
-=Велла=-
mvf23, аа ... точно))))) недосмотрела...
vano-m
Огромное спасибо. Лабу я таки сегодня сдал. Правда один нюанс. Когда я ее на паскале написал и запустил все работало и выводилось в файл как надо, только ответ всегда был 1. Непонятна почему. Хотя мне очень повезло. Другой препод был, который не посмотрел текст, просто проверил. Я подстроил элементы так чтоб ответ был 4. и написал writeln 4. ГЫ.
Вам всем огромное спасибо, ибо я всетаки посмотрев на готовый текст программы понял как решать подобные лабораторные. Хотя со следующей темой мрак...