• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Турбо паскаль

  • Автор темы Автор темы Dragoon
  • Дата начала Дата начала

Dragoon

Новые
Регистрация
27 Май 2013
Сообщения
29
Реакции
0
Баллы
0
Турбо паскаль

Прошу помощи мастеров решить две задачки:
1) Задана последовательность из N чисел. Найти самую длинную последовательность, обладающую следующим свойством: Ai<Ai+1>Ai+2<Ai+3>Ai+4<…
2) Построить график функции y=cos(x-1)+|x|

Заранее спасибо
 
1) Задана последовательность из N чисел. Найти самую длинную последовательность, обладающую следующим свойством: Ai<Ai+1>Ai+2<Ai+3>Ai+4<…
Во, черт - задачка оказалась на удивление головоломной. Часа 4 отлаживал. Или за лето мозги скисли?..
Код:
Const
 N=100;

Var
 k1,k2,i,Nbeg,Nbeg_max:Byte;
 A:Array[1..N] of Byte;

Function Test(Q1,Q2,Q3:Integer):Boolean;
begin
 Test:=((Q1>Q2) and (Q3>Q2)) or ((Q1<Q2) and (Q3<Q2));
end;

Begin
 Randomize;
 Writeln('Initial sequence:');
 for i:=1 to N do
  begin
   A[i]:=Random(200);
   Write(A[i]:4);
  end;
 Writeln;
 Writeln;
 i:=1;
 k1:=0;
 k2:=0;
 Repeat
  Nbeg:=i;
  repeat
   if (i<N-1) and Test(A[i],A[i+1],A[i+2]) then Inc(k2);
   Inc(i);
  until (i>=N-1) or Not(Test(A[i-1],A[i],A[i+1]));
  if k2>k1 then
   begin
    Nbeg_max:=Nbeg;
    k1:=k2;
   end;
  k2:=0;
 Until i>=N-1;
 Writeln;
 Writeln;
 Writeln('Longest subsequence:');
 for i:=Nbeg_max to Nbeg_max+k1+1 do Write(A[i]:4);
 Readln
End.
 
2) Построить график функции y=cos(x-1)+|x|
Так, ну прежде всего, поскольку Вы не сподобились указать диапазон значений аргумента, для которого нужно строить график, выбор этого диапазона я оставляю за собой и ставлю принудительно от -2.0 до +2.0. Претензии типа "а мне надо от -3 до +7" НЕ ПРИНИМАЮТСЯ.
Далее. Инициализацию графического режима задавайте сами. Параметры функции InitGraph определяются именами Ваших драйверов, их адресами на Вашем диске и т.д. Если возникнут проблемы, прошу в эту тему: http://www.tehnari.ru/f43/t95841/ - там инициализация графики разобрана подробно.

Код:
Uses CRT, Graph;

Const
 ShX=30;
 ShY=30;

Var
 CfX,CfY,Xgr,Ygr,i:Integer;
 x,y,dx:Real;
 s:String;

Function F(z:real):Real;
begin
 F:=Cos(z-1.0)+Abs(z);
end;

Begin
 InitGraph(..., ...); [COLOR=Red][B]{ тут самостоятельно }[/B][/COLOR]
 CfX:=(GetMaxX-2*ShX) div 4;
 CfY:=(GetMaxY-2*ShY) div 3;
 SetLineStyle(SolidLn,0,ThickWidth);
 Line(ShX,GetMaxY-ShY,ShX+CfX*4,GetMaxY-ShY);
 Line(ShX,ShY,ShX,ShY+CfY*3);
 SetLineStyle(DottedLn,0,NormWidth);
 SetTextJustify(CenterText, TopText);
 x:=-2.0;
 STR(x:4:1,s);
 OutTextXY(ShX,ShY+CfY*3+8,s);
 for i:=1 to 8 do
  begin
   x:=-2.0+0.5*i;
   STR(x:4:1,s);
   Xgr:=ShX+Round(0.5*i*CfX);
   OutTextXY(Xgr,ShY+CfY*3+8,s);
   Line(Xgr,ShY,Xgr,ShY+CfY*3);
  end;
 SetTextJustify(RightText, CenterText);
 y:=0;
 STR(y:3:1,s);
 OutTextXY(ShX-4,GetMaxY-ShY,s);
 for i:=1 to 6 do
  begin
   y:=0.5*i;
   STR(y:3:1,s);
   Ygr:=GetMaxY-ShY-Round(y*CfY);
   OutTextXY(ShX-4,Ygr,s);
   Line(ShX,Ygr,ShX+Round(CfX*4),Ygr);
  end;
 SetLineStyle(SolidLn,0,ThickWidth);
 x:=-2.0;
 y:=Cos(-3.0)+2;
 Xgr:=ShX;
 Ygr:=GetMaxY-ShY-Round(F(x)*CfY);
 MoveTo(Xgr,Ygr);
 dx:=0.02;
 for i:=1 to 200 do
  begin
   x:=x+dx;
   y:=F(x);
   Xgr:=ShX+Round((x+2)*CfX);
   Ygr:=GetMaxY-ShY-Round(F(x)*CfY);
   LineTo(Xgr,Ygr);
  end;
 ReadKey;
 CloseGraph;
End.
 

Вложения

  • AA01.webp
    AA01.webp
    18 KB · Просмотры: 68
Назад
Сверху