Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 08.08.2014, 13:47   #1 (permalink)
Dragoon
Member
 
Регистрация: 27.05.2013
Сообщений: 29
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Турбо паскаль

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

Заранее спасибо
Dragoon вне форума   Ответить с цитированием

Старый 08.08.2014, 13:47
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Схожие темы могут помочь вам в решении вопроса

Помогите составить программу на турбо паскаль
Турбо Паскаль. Задание на анимацию
Турбо Паскаль. Тип запись
Турбо Паскаль. Рекурсии
Программа в Турбо-Паскаль 7,0

Старый 08.08.2014, 19:33   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dragoon Посмотреть сообщение
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.
Vladimir_S вне форума   Ответить с цитированием
Старый 09.08.2014, 10:15   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от Dragoon Посмотреть сообщение
2) Построить график функции y=cos(x-1)+|x|
Так, ну прежде всего, поскольку Вы не сподобились указать диапазон значений аргумента, для которого нужно строить график, выбор этого диапазона я оставляю за собой и ставлю принудительно от -2.0 до +2.0. Претензии типа "а мне надо от -3 до +7" НЕ ПРИНИМАЮТСЯ.
Далее. Инициализацию графического режима задавайте сами. Параметры функции InitGraph определяются именами Ваших драйверов, их адресами на Вашем диске и т.д. Если возникнут проблемы, прошу в эту тему: Турбо Паскаль. Задание на анимацию - там инициализация графики разобрана подробно.

Код:
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(..., ...); { тут самостоятельно }
 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.jpg  
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 18:07.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.