Контрольная работа по "Технологии програмирования"

МИНИСТЕРСТВО  ОБРАЗОВАНИЯ И НАУКИ

РОССИЙСКОЙ  ФЕДЕРАЦИИ

ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

КАМСКАЯ ГОСУДАРСТВЕННАЯ ИНЖЕНЕРНО-ЭКОНОМИЧЕСКАЯ АКАДЕМИЯ 

Кафедра «Сервис транспортных систем» 
 
 
 
 

КОНТРОЛЬНАЯ РАБОТА

По дисциплине «Технологии программирования» 
 

Вариант 5 
 
 
 
 
 
 
 
 
 
 
 
 
 

                                                        Выполнил: студент

                                                        Группы 2227

                                                        Галиакбаров Р.Н. 

                                                        Проверил: доцент

                                                        Беляев А.И. 
 
 
 
 
 

Набережные  Челны 
2011 год.

1. ЛИНЕЙНЫЕ АЛГОРИТМЫ

Описание  задачи

z1:=1-1/4sin22a+cos2a

z2:=cos2a+cos4a

Алгоритм  решения задачи

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Рис.1.1. Блок-схема алгоритма решения задачи

Реализация в Turbo Pascal

 

Program kontrolnaya;

Var z1, z2, a: Double;

begin

     WriteLn('enter a');

     ReadLn(a);

     z1:=1-(1/4)*sqr(sin(2*a))+cos(2*a);

     z2:=sqr(cos(a))+sqr(sqr(cos(a)));

     WriteLn('z1= ',z1,' z2= ',z2);

     ReadLn;

End.

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

 

2. АЛГОРИТМЫ С РАЗВЕТВЛЕНИЯМИ

Описание  задачи

  ,  x- нечетное, a > 0

e=  , y- четное, a < 0

      |axy|, во всех остальных случаях

Алгоритм  решения задачи

 

Реализация в Turbo Pascal

Program kontr2;

Var e,a: Double;

    x,y:Integer;

begin

     WriteLn('enter x, y, a ');

     ReadLn(x, y, a);

     If x mod 2<>0 then  e:=y*exp(Ln(x)/a)

     else if y mod 2=0 then e:=(a*x/2)*exp(Ln(y)/(-a))

     else e:=abs(a*x*y);

     WriteLn('e= ', e);

     ReadLn;

End.

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

3. АЛГОРИТМЫ С ЦИКЛАМИ

Описание  задачи

     Вычислить и вывести на экран в виде таблицы  значения функции, заданной с помощью  ряда Тейлора, на интервале от x1 до x2 с шагом dx с точностью ε. Таблицу снабдить заголовком и шапкой. Каждая строка таблицы должна содержать значение аргумента, значение функции и количество просуммированных членов ряда.

Алгоритм  решения задачи

 

Реализация в Turbo Pascal

 

const Maxlter=500;

var c,y,x,x1,x2,dx:Real;

    n,eps: Integer;

    done: boolean;

Begin

     Writeln('vvedite interval [x1,x2], tochnost, u shag');

     Readln(x1,x2,eps,dx);

     done:=true;

     x:=x1;

      c:=x;

      y:=c;

     n:=1;

     Writeln('____________________________________');

     Writeln('| Argument | Znachenie | K-vo iter |');

     Writeln('------------------------------------');

    While x<=x2  do

         begin

           c:=-c*sqr(x)/2/n/(2*n+1);

           y:=y+c;

           x:=x+dx;

           inc(n);

          Writeln('|', x:10:1,'|', y:10:eps,' | ',n ,'|');

           Writeln('------------------------------------');

            If n<=Maxlter then continue;

             done:=false;

             Break;

     End;

   ReadLn;

End.

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

4. ОДНОМЕРНЫЕ МАССИВЫ

Описание  задачи

     В одномерном массиве, состоящем из п вещественных элементов, вычислить:

  1. максимальный элемент массива;
  2. сумму элементов массива, расположенных до последнего положительного элемента.
  3. сжать массив, удалив из него все элементы, модуль которых находится в интервале [а, b]. Освободившиеся в конце массива элементы заполнить нулями.
 

Алгоритм  решения задачи

 
Реализация в Turbo Pascal

Program kontr4;

var

   n,i,j: 1..1000;

   a: array [1..1000] of integer;

   b,c: array [1..1000] of integer;

   max,sum,d,e: Integer;

Begin

     repeat;

     writeln('Введите число элементов n:');

     readln(n);

     until n>0;

     writeln('введите элементы массива с первого по ',n,'-й');

     max:= a[i];

      for i:=1 to n do

        begin

             write(i,': ');

             readln(a[i]);

             if a[i]>max then max:=a[i]

        end;

       i:=1;

       while a[i]>0 do

            for i:=1 to n do

            begin

                  sum:=sum+a[i];

            end;

           writeLn('  max= ', max,'; sum= ',sum);

           repeat;

           writeln('введите интервал сжатия массива [a,b]');

           readln(d,e);

           Until (abs(d)<abs(e));

     d:=abs(d);

     e:=abs(e);

     i:=1;

      for i:=1 to n do

         if (a[i]>=d) and (a[i]<=e) then write('0 ')

          else write(a[i],' ');

     readLn;

end.

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

 

5. ДВУМЕРНЫЕ МАССИВЫ

Описание  задачи

     Дана  целочисленная квадратная матрица. Определить:

     1) сумму элементов в тех столбцах, которые не содержат отрицательных элементов (оформить в виде функции);

     2) минимум среди сумм модулей  элементов диагоналей, параллельных  побочной диагонали матрицы (оформить  в виде процедуры).

Алгоритм  решения задачи

 

Реализация  в Turbo Pascal

Program z1;

uses crt;

const

    n=3;

type

   matr = array[1..n,1..n] of integer; 

var

   i,j,ks1,ks2,min:integer;

   a:matr;

   summb:boolean; 
 

procedure summd(m1:matr; var m:integer);

    var i,j,k:integer;

        s:array[1..n*2] of integer;

    begin

       k:=0;

       for i:=1 to n do begin

          for j:=1 to n do begin

            s[j+k]:=s[j+k]+abs(a[i,j]);

          end;

          k:=k+1;

       end;

       m:=s[1];

       for i:=1 to n*2-1 do

          if s[i]<m then m:=s[i];

    end;

function sum(j:integer):integer;

    var i,s:integer;

    begin

         s:=0

        for i:=1 to n do s:=s+a[i,j];

        sum:=s;

    end;

begin

    clrscr;

    writeLn('Введите элементы матрицы');

     for i:=1 to n do

     for j:=1 to n do

     begin

          writeln('');

          readLn(a[i,j]);

          GotoXY(j*8,i*2);

          write(a[i,j]:3);

    end;

    writeln;

    for j:=1 to n do begin

        summb:=true;

        for i:=1 to n do begin

            if a[i,j]<0 then summb:=false; 

        end;

        if summb then begin

           writeln('сумма', Ј,’го столбца = ',sum(j);

           ks1:=ks1+1;

        end; 

    end;

    if ks1=0 then writeln('Нет столбцов не содержащих отрицательных элементов');

    summd(a,min);

    writeln('Minimalnaya summa diagonalei paral gl diag: = ',min);

    readkey;

end.

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

6. СТРОКИ

Описание  задачи

     Дана  строка символов. Группы символов, разделенные одним или несколькими пробелами и не содержащие пробелов внутри себя, будем называть словами. Найти количество слов, первый и последний символы которых совпадают.

Алгоритм  решения задачи

 

 
Реализация  в Turbo Pascal

uses crt;

const rz=['_',':',';',',',' ','.','?','!'];

var s,s1:string;

    i,k,n:byte;

    f:boolean;

begin

clrscr;

writeln('Введите предложение');

readln(s);

n:=0;

i:=1;

while i<=length(s) do

if not(s[i] in rz)and ((i=1)or(s[i-1] in rz)) then

begin

  k:=i;s1:='';

  while not(s[k] in rz)and(k<=length(s))do

   begin

    s1:=s1+s[k];

    k:=k+1;

   end;

  if s1[1]=s1[length(s1)] then n:=n+1;

i:=i+length(s1);

end;

else i:=i+1;

write('Кол-во слов с одинаковыми буквами вначале и на конце: ',n);

readln;

end.

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

 

7. ФАЙЛЫ

Описание  задачи

     Дан файл вещественных чисел. Удалить из него все компоненты, принадлежащие  отрезку [1,5].

Алгоритм  решения задачи

 
Реализация в Turbo Pascal

uses crt;

const

     fn='array.dat'; 

type t =file of real; 

var

n,i:integer;

a: array [1..100] of real;

b:array[1..100] of real;

tf:t; 

begin

clrscr;

filemode:=2;

Assign(tf,fn);

{$I-};

Reset(tf);

{$I+}

If IOResult<>0 then Rewrite(tf); 

If FileSize(tf)=0 then

   begin

      Writeln('vvedite k-vo elementov');

      readln(n);

       Writeln('vvedite ',n,' elementov');

       For i:=1 to n do

          begin

             write(i,'-й: ');

              readln(a[i]);

              if (a[i]<1) or (a[i]>5) then b[i]:=a[i];

              write(tf,b[i]);

          end;

    end; 

   writeln;

   writeln('<<prosmotr faila>>');

   reset(tf);

    repeat

        read(tf,b[i]);

        if b[i]<>0 then writeln(b[i]:3);

    until eof(tf);

readln;

close(tf);

 erase(tf);

end.

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

 

8. ЗАПИСИ

Описание  задачи

     Расписание электричек хранится в виде файла записей. Каждая запись содержит название пункта назначения, пометки типа «СВ», «ПВ», «КСВ» и время отправления. Написать программу, выполняющую:

  • ввод расписания с клавиатуры;
  • вывод на экран информации о поездах типа «СВ», отходящих после введенного времени;
  • вывод на экран информации о поездах типа «ПВ», отправляющихся в пункт назначения «Москва»;

 

Алгоритм  решения задачи

   
Реализация в Turbo Pascal

Uses Crt;

Const

       found: Boolean=false;

Type

      Info = record

      P :String[10];

      M : String[3];

      T : String [5];

end;

Var

poezd: Info;

f: File of Info;

yn: string[1];

procedure Edit;

Var

f: File of Info;

poezd: Info;

n:integer;

i:1..100;

begin

     clrscr;

     assign(f,'poezd.dat');

     reset(f);

     Writeln('ckolko zapicei xotite vvecti?');

     ReadLn(n);

     Writeln('vvedite elementy!');

     Write('vvodite postrochno: ');

      For i:=1 to n do

          begin

           With poezd do

                begin

                 Writeln('Vvedite punkt:');

                 Readln(P);

                 Writeln('Vvedite Metky(CB|PB|KCB):');

                 Readln(M);

                 Writeln('Vvedite vremya');

                 Readln(T);

                 writeln('|',P,'|',M,'|',T,'|');

                End;

           Write(f,poezd);

End;

End;

procedure FndCB;

Var

poezd: Info;

f: File of Info;

i:1..100;

z: String[5];

Begin

  ClrScr;

  Write('Vvedite vremya otpravleniya (dlya poezdov s metkoi CB)>>');

         ReadLn(z);

         Writeln('-------------------------------');

         Writeln('|       punkt        |   Metka|');

         Writeln('-------------------------------');

         assign(f,'poezd.dat');

         reset(f);

         seek(f,0);

         While not Eof(f) do

            begin

             Read(f,poezd);

             If (poezd.T>=z) and (poezd.M='CB') then

                begin

                found:=true;

                WriteLn('|',(poezd.P):20,'|',(poezd.M):8,'|');

                Writeln('-------------------------------');

               End;

            End;

         If Not found then Writeln('Poezda net');

end;

procedure Msk;

Var

poezd: Info;

f: File of Info;

Begin

  ClrScr;

  Assign(f,'poezd.dat');

  Reset(f);

  seek(f,0);

  While not Eof(f) do

        begin

         Read(f,poezd);

            if (poezd.M='PB') and (poezd.P='Moskva') then

                begin

                found:=true;

               Writeln('Raspisanie Poezdov');

               Writeln('---------------------------------------');

               WriteLn('|       Punkt        | Metka | Vremya |');

               Writeln('---------------------------------------');

                writeln('|',(poezd.P):20,'|',(poezd.M):7,'|',(poezd.T):8,'|');

               Writeln('---------------------------------------');

            readln;

            end;

         end;

end;

Begin

      ClrSCr;

      Assign(f,'poezd.dat');

       {$I-};

       Reset(f);

       {$I+}

      If IOResult<>0 then Rewrite(f);

      if FileSize(f)=0 then Edit;

      FndCB;

     Msk;

         writeLn('yDa/\uTb 3anucu (Y/N)?');

         readln(yn);

         if (yn='y') or (yn='Y') then

         begin

              Rewrite(f);

              Writeln('3anucu yDa/\eHbI.');

         end;

         Writeln('Ha}|{MuTe ENTER.');

         ReadLn;

 close(f);

end.

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

   
 
 
 
 
 
 
 
 
 
 
 
 
 

Список  использованных источников

     1. Павловская Т. А. «Паскаль. Программирование  на языке высокого уровня»:  Практикум. - СПб.: Питер, 2007.- 317 с: ил.

     2. Зеленяк О.П. «Практикум программирования на Turbo Pascal. Задачи, алгоритмы и решения.» - 3-е изд., испр. и доп. - СПб.: ДиаСофтЮП, М.: ДМК Пресс, 2007. - 320 с.

     3. Шпак Ю.А. Программирование в  Turbo Pascal. Переход к Delphi. – К:  «МК-Пресс», 2006. – 16 с., ил.

     4. Смирнов Ю.Н., Макарова И.В. Основы программирования на языке Turbo Pascal. Часть 1: Учебное пособие – Набережные Челны: Изд-во КамПИ, 2000, 40 с.

     5. Смирнов Ю.Н., Макарова И.В., Исавнин  А.Г. Основы программирования  на языке Turbo Pascal. Часть 2: Учебное  пособие – Набережные Челны: Изд-во КамПИ, 2000, 29 с.

Контрольная работа по "Технологии програмирования"