Основы алгоритмизации и программирования

Автор работы: Пользователь скрыл имя, 30 Января 2013 в 21:22, контрольная работа

Краткое описание

Задание 1.
Pascal
Разработать программу вывода на экран меню следующего вида:
Выбор конкретного режима из этого меню должен осуществляться с помощью клавиш Курсор вверх и Курсор вниз. При нажатии этих клавиш должен генерироваться звук продолжительностью 0,5 с. При этом строка, на которую падает выбор, должна выделяться цветом и фоном. Выбор фиксируется нажатием клавиши Enter. После этого должно быть выдано сообщение о выбранном режиме.

Прикрепленные файлы: 1 файл

KR Prog.docx

— 288.48 Кб (Скачать документ)

 

 

 

 

 

 

 

 

 

                                                  Основы алгоритмизации 

                                                   и программирования

                                                   Контрольная работа №2

                                                   Вариант №9

                                                   Гецман Виталий Николаевич

                                                   Группа 14412

                                                   Шифр IV-Г-59

 

Задание 1.

Pascal

Разработать программу вывода на экран меню следующего вида:

Выбор конкретного  режима из этого меню должен осуществляться с помощью клавиш Курсор вверх  и Курсор вниз. При нажатии этих клавиш должен генерироваться звук продолжительностью 0,5 с. При этом строка, на которую падает выбор, должна выделяться цветом и фоном. Выбор фиксируется нажатием клавиши Enter. После этого должно быть выдано сообщение о выбранном режиме.

 

Решение.

uses crt;

const kol=3;{количество пунктов  меню}

      {массив названий пунктов меню}

      vybor:array[1..kol] of string=('Rejim 1','Rejim 2','Rejim 3');

var i,k:byte;

    c:char;

begin

textbackground(0);

textcolor(15);

clrscr;

writeln('Viberite rejim:');

for i:=1 to kol do

writeln(vybor[i]);

k:=5;

repeat

repeat

c:=readkey;

until c in [#13, #72, #80];

if c in [#72,#80] then

begin

  sound(600);

  delay(500);

  nosound;

end;

case c of

#72: begin{стрелка вверх}

     k:=k-1;

     if k=1 then k:=4;{если  выше верха, вниз}

     for i:=1 to kol do

      begin

       if i=k-1 then{выделенный пункт}

        begin

         textbackground(3);

         textcolor(9);

        end

       else{остальные}

        begin

         textbackground(0);

         textcolor(15);

        end;

     gotoXY(1,i+1);

     write(vybor[i]);

     end;

    end;

#80: begin {стрелка вниз}

      k:=k+1;

      if k=5 then k:=2;{если ниже низа, вверх}

      for i:=1 to kol do

       begin

        if i=k-1 then{выделенный пункт}

         begin

          textbackground(3);

          textcolor(9);

         end

        else{остальные}

         begin

          textbackground(0);

          textcolor(15);

         end;

        gotoXY(1,i+1);

        write(vybor[i]);

       end;

     end;

#13:begin

    gotoXY(35,13);

    textbackground(6);

    textcolor(1);

    write('vibran rejim ',k-1);

    readln;

    exit;

    end;

end;

until c=#13;

readln

end.

                                        Рисунок 1. Результат выполнения  программы

 

Задание 2

Построить график функции  в графическом режиме.

                  Ответ:

Решение

Program GraficFun;

    uses

      Crt,Graph;      {подключаем стандартные библиотеки}

      type

      TFunction=function(x:real):real;

    var

      f:TFunction;           {объявляем переменную-функцию}

      grDriver,              {переменная: тип видеоадаптера}

      grMode,                {переменная: номер видеорежима}

      grError:integer;       {переменная: результат инициализации}

    procedure DrawGrid(a,b:real);        {процедура прорисовки осей графика}

     var

       s:string[4];

       max:real;

     begin

       Line(0,GetMaxY div 2,GetMaxX,GetMaxY div 2);

       Line(GetMaxX div 2,0,GetMaxX div 2,GetMaxY);

       if a>b then

         max:=a

       else

         max:=b;

       Str(-max-0.5:4:1,s);

       OutTextXY(0,(GetMaxY div 2)+10,s);

       Str(max+0.5:4:1,s);

       OutTextXY(600,(GetMaxY div 2)+10,s);

     end;

 

    procedure InitMyGraph;        {процедура инициализации графического видеорежима}

     begin

      {автоматическое определение типа драйвера}

       grDriver:=Detect;

       InitGraph(grDriver,grMode,'');     {ИНИЦИАЛИЗАЦИЯ}

       grError:=GraphResult;              {результат инициализации}

       if grError<>grOk then              {если возникла ошибка}

       begin

         writeln('Ошибка инициализации графики');

          {вывод текста конкретной ошибки}

       writeln(GraphErrorMsg(grError));

       Halt(1);   {завершение программы, код возврата 1}

       end;

     end;

      {выход из графического режима}

    procedure CloseMyGraph;

     begin

       CloseGraph;           {выход из графического режима в текстовый}

    end;

     {процедура построения графика функции }

    procedure DrawFunction(var f:TFunction;a,b,dx:real);

     var

       i:integer;

       x,y:real;

       sDx,sDy:real;

       y0,x0:integer;

       yi,xi:integer;

       fmin,fmax:real;

       maxy,maxx:real;

       n:integer;

       s:string;

     begin

       SetColor(Cyan);

       DrawGrid(a,b);

       SetColor(Yellow);

       n:=round((b-a)/dx);

       x:=a;

       fmin:=f(x);

       fmax:=f(x);

       for i:=1 to n do

       begin

         x:=x+dx;

         if f(x)>fmax then

           fmax:=f(x);

         if f(x)<fmin then

           fmin:=f(x);

       end;

       if abs(fmax)>abs(fmin) then

         maxy:=abs(fmax)

       else

         maxy:=abs(fmin);

       if abs(a)>abs(b) then

         maxx:=abs(a)

       else

         maxx:=abs(b);

       x:=a;

       y:=f(a);

       sDy:=2*(maxy+0.5)/(GetMaxY);

       sDx:=2*(maxx+0.5)/(GetMaxX);

       x0:=(GetMaxX div 2)+Trunc(a/sDx);

       y0:=(GetMaxY div 2)-Trunc(y/sDy);

       Str(x:4:0,s);

       SetColor(Cyan);

       OutTextXY(x0-25,250,s);

       line(x0,235,x0,245);

       for i:=1 to n do

       begin

         x:=x+dx;

         y:=f(x);

         xi:=(GetMaxX div 2)+Trunc(x/sDx);

         yi:=(GetMaxY div 2)-Trunc(y/sDy);

         SetColor(Yellow);

         Line(x0,y0,xi,yi);

         SetColor(Cyan);

         Str(x:4:1,s);

         line(xi,235,xi,245);

         Str(y:4:1,s);

         OutTextXY(320,yi,s);

         x0:=xi;

         y0:=yi;

       end;

       Str(x:4:1,s);

       OutTextXY(x0-15,250,s);

     end;

 

     {$F+}

    function tan(t:real):real;

      begin

      tan:=sin(t)/Cos(t);

      end;

 

     function MyFunc(t:real):real;

     begin

       MyFunc:=tan(t)-1/3*sqr(tan(t))*tan(t)+1/5*sqr(sqr(tan(t)))*tan(t)-1/3;

    end;

 

 

     begin

      f:=MyFunc;

      InitMyGraph;            {инициализация графики}

      DrawFunction(f,0,0.8,0.1);        {рисуем функцию}

      Repeat

      until KeyPressed;

      ReadKey;

      CloseMyGraph;                        {выходим из графического режима}

     end.

 

Задание 3

Разработать форму для  ввода исходных данных и вывода результатов, используя компоненты страницы Standard.

Вариант 9

Проверить, можно ли построить  параллелограмм из отрезков с длинами  x, y, v, w.

Решение

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Buttons, ExtCtrls;

 

type

  TForm1 = class(TForm)

    Edit1: TLabeledEdit;

    Edit2: TLabeledEdit;

    Edit3: TLabeledEdit;

    Edit4: TLabeledEdit;

    BitBtn1: TBitBtn;

    procedure BitBtn1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var x,y,v,w:real;

begin

if (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='') or (Edit4.Text='') then begin

ShowMEssage('Заполните все  поля!');

exit;

end;

x:=StrToFloat(Edit1.Text);

y:=StrToFloat(Edit2.Text);

v:=StrToFloat(Edit3.Text);

w:=StrToFloat(Edit4.Text);

if ((x=y) and (v=w)) or ((x=v) and (y=w)) or ((x=w) and (y=v)) then ShowMEssage('Построить Паралеллограмм  из задданных отрезков ВОЗМОЖНО')

   else ShowMEssage('Построить  Паралеллограмм из задданных  отрезков НЕВОЗМОЖНО');

 

end;

 

end.

 

Рисунок 2. Результат выполнения программы

 

Задание 4

Построить график функции, используя  компонент TСhart.

 

Вариант 9.  

 

Решение

 

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls, TeeProcs, TeEngine, Chart, Series, math;

 

type

  TForm1 = class(TForm)

    Chart1: TChart;

    Button1: TButton;

    Series1: TFastLineSeries;

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Button1Click(Sender: TObject);

var x:real;

begin

x:=-9;

while x<=10 do begin

  form1.series1.AddXY(x,x-sqrt(9+x)+sqr(x)-4);

  x:=x+0.2;

end;

end;

 

end.

 

Рисунок 3. Результат выполнения программы

 

Задание 5

Разработать приложение в соответствии с заданием. Организовать ввод массивов как из текстовых файлов, так и  с клавиатуры. Для представления  массивов на экране использовать компоненты StringGrid, ListBox, ComboBox и т. п.

Вариант 9

Для заданной матрицы А(N, N) найти:

- сумму всех элементов;

- сумму элементов главной диагонали;

- значения наибольшего и наименьшего  из элементов главной диагонали. 

 

Решение

 

unit Unit1;

 

interface

 

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, Buttons, Grids, Spin;

 

type

  TForm1 = class(TForm)

    SpinEdit1: TSpinEdit;

    Label1: TLabel;

    StringGrid1: TStringGrid;

    Label3: TLabel;

    BitBtn1: TBitBtn;

    Label4: TLabel;

    Button1: TButton;

    OpenDialog1: TOpenDialog;

    Label2: TLabel;

    Label5: TLabel;

    procedure BitBtn1Click(Sender: TObject);

    procedure SpinEdit1Change(Sender: TObject);

    procedure Button1Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.BitBtn1Click(Sender: TObject);

var i,j:integer;

a:array of array of real;

s,s1,max,min:real;

begin

setlength(a,spinedit1.Value);

for i:=0 to spinedit1.Value-1 do

setlength(a[i],spinedit1.Value);

for i:=0 to Spinedit1.Value-1 do

  for j:=0 to Spinedit1.Value-1 do

if StringGrid1.Cells[j,i]<>'' then

  a[i,j]:=StrToFloat(StringGrid1.Cells[j,i])

else begin

ShowMessage('Заполните все  ячейки!');

exit;

end;

 

s:=0;

s1:=0;

max:=a[0,0];

min:=a[0,0];

for i:=1 to Spinedit1.Value do

  for j:=1 to Spinedit1.Value do begin

                s := s + a[i-1][j-1];

                if (i=j) then  begin s1:=s1+a[i-1][j-1];

                    if (max<a[i-1][j-1]) then max:=a[i-1][j-1];

                    if (min>a[i-1][j-1]) then min:=a[i-1][j-1];

                end;

 

                end;

 

Label3.Caption:='Сумма '+FloatToStrf(s,fffixed,4,3);

Label4.Caption:='Сумма эл-ов главной  диагонали:'+FloatToStrf(s1,fffixed,4,3);

label2.Caption:='Максимальный элемент  главной диагонали:'+FloatToStrf(max,fffixed,4,3);

label5.Caption:='Минимальный элемент  главной диагонали:'+FloatToStrf(min,fffixed,4,3);

end;

 

procedure TForm1.SpinEdit1Change(Sender: TObject);

begin

StringGrid1.RowCount:=SpinEdit1.Value;

StringGrid1.ColCount:=SpinEdit1.Value;

end;

 

 

 

procedure TForm1.Button1Click(Sender: TObject);

var F: TextFile;

A: array of array of integer;

i, j: SmallInt;

begin

if not OpenDialog1.Execute then

  exit;

  AssignFile(F, OpenDialog1.FileName);

  Reset(F);

 

setlength(a,spinedit1.Value);

for i:=0 to spinedit1.Value-1 do

setlength(a[i],spinedit1.Value);

 

for i:=0 to Spinedit1.Value-1 do

  for j:=0 to Spinedit1.Value-1 do

  begin

   read(F, A[i, j]);

   StringGrid1.Cells[j, i]:= IntToStr(A[i, j]);

  end;

end;

 

 

end.

Рисунок 4. Результат выполнения программы

 

Список использованной литературы

  1. 1. Галисеев, Г. В. Программирование в среде Delphi 2005 : самоучитель / Г. В. Галисеев. – М. : Диалектика, 2005. – 400 с.

 

  1. Бондарев, В. М. Основы программирования / В. М. Бондарев, В. И. Рублинецкий, Е. Г. Качко. – Харьков : Фолио ; Ростов н/Д : Феникс, 1997. – 368 с.

 

  1. Климова, Л. М. Pascal 7.0. Практическое программирование : решение типовых задач / Л. М. Климова. – М. : КУДИЦ-ОБРАЗ, 2000, – 528 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

01.10.2012

 


Информация о работе Основы алгоритмизации и программирования