Программирование на языке Паскаль

Автор работы: Пользователь скрыл имя, 09 Февраля 2013 в 16:22, контрольная работа

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

При выполнении задания сначала в программе необходимо организовать ввод с клавиатуры некоторого значения переменной x. Затем при помощи операторов If, записывая условия с учётом приоритета логических операций и операций отношения, переменной f присваивается значение соответствующего условию выражения, в котором при необходимости должны использоваться стандартные арифметические функции В вариантах, содержащих выражения с тангенсами, котангенсами и сложными степенями, необходимо их преобразование с использованием формул:

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

Pascal.doc

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

Министерство образования  и науки РФ

 

Федеральное государственное  бюджетное образовательное учреждение высшего профессионального образования

 

 

 

 

 

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

по дисциплине «Основы алгоритмизации и языки программирования»

«Программирование на языке Паскаль»

Вариант №3

 

 

 


 

 

 

 

 

Методические  указания к контрольной работе № 1

Основная цель изучения дисциплины «Информатика-2» -

изучить язык высокого уровня Pascal, научиться формулировать несложные алгоритмы, реализовывать их в виде программ и отлаживать при помощи существующего программного обеспечения.

Контрольная работа № 1 состоит из трех отдельных заданий, по каждому из которых Вы должны составить и отладить программу, которую Вы должны прислать вместе с ответами на контрольные вопросы (там, где они есть).

Задание № 1. Выражения и условный оператор if

Задание: Вычислить значение функции f в точке x. Значение x должно вводиться с клавиатуры. Вывести полученный результат на экран. Ответить на вопросы. Варианты функций и вопросы приведены в нижеследующей таблице.

При выполнении задания сначала в программе  необходимо организовать ввод с клавиатуры некоторого значения переменной x. Затем при помощи операторов If, записывая условия с учётом приоритета логических операций и операций отношения, переменной f присваивается значение соответствующего условию выражения, в котором при необходимости должны использоваться стандартные арифметические функции В вариантах, содержащих выражения с тангенсами, котангенсами и сложными степенями, необходимо их преобразование с использованием формул:

Не следует  брать данный пример за образец при  выполнении своего задания; попробуйте самостоятельно записать оптимальный  вариант программы, используя два  условных оператора, один вложенный  в другой.

В конце программы  полученное значение f должно выводиться на экран.

В соответствии с вариантом, задание имеет вид:

    1. Какие операции и стандартные функции использовались в выражениях программы?
    2. Какого типа результат этих операций и функций?

Решение:

Программа содержит следующий  код:

Program Z1;

uses crt;

var x, f1, f2, f3:real;

begin clrscr;

      write ('Введите координату точки Х');

      readln(x);

      f3:=(x*(x+1))/(Ln(x*x+1));

      if x>=0 then writeln ('Значение функции в точке Х',f3:4:4)

      else if x<(-3) then

                        begin f1:=x/(sqrt(sqr(x)-2*x-15));

                              writeln ('Значение функции в точке Х',f1:4:4);

                        end  

      else

                        begin f2:=x*(sin(3/x));

                              writeln (''Значение функции в точке Х',f2:4:4);

                        end;

      readln;

end.

В ходе выполнения задания, я решил воспользоваться  алгоритмом отличным от представленного  в примере. Первой рассчитывается теряя  функция, которая удовлетворяет  всем Х, большим нуля.  Второй – функция на промежутке от минус бесконечности до минус трех. Если, введенное значение, Х не принадлежит двум другим промежуткам, то последней рассчитывается первая функция.

Результаты  представлены ниже:

Ответы на вопросы:

Какие операции и стандартные функции использовались в выражениях программы? – Были использованы операции сложения, вычитания, умножения, деления, нахождения квадрата и квадратного корня аргумента, а также логические операции и операции отношения.

Какого типа результат этих операций и функций? – Результат того же типа, как и у переменной – вещественного.

Задание № 2. Операторы циклов

Задание: Вычислить сумму s значений функции f в точках xi , которые берутся с заданного интервала [a; b] через равные отрезки длиной h. Длина отрезка рассчитывается по формуле

Здесь i = 1, 2, 3 ... n — номер точки; n — задаваемое количество точек; a — начало и b — конец интервала изменения x. Вывести на экран результаты вычислений, полученные при помощи следующих циклов:

While логическое_выражение Do тело_цикла;

Repeat тело_цикла Until логическое_выражение;

For параметр:=мин._значение To макс. Do тело_цикла;

For параметр:=макс._значение DownTo мин. Do тело_цикла.

Ответить на вопросы.

При выполнении задания сначала  в программе требуется задать значения исходных данных: границы интервала a и b, количество точек n.

Затем при помощи операторов циклов, записываемых в программе  последовательно друг за другом в  любом порядке следования, необходимо в каждом из циклов вычислить сумму s и вывести её на экран, т.е. в одной программе решить задачу четырьмя способами. Таким образом, в результате выполнения программы на экране должны быть четыре значения s, совпадающие между собой.

В соответствии с вариантом, задание имеет вид:

    1. Опишите оператор For…To…Do…
    2. В чем его основные отличия от остальных циклов Pascal?

Решение:

Program Z2;

        uses crt;

        var a, b, W, R, FT, FD, h, f, f1, S: real;

            i, n: integer;

begin clrscr;

      W:=0;

      a:=0.5;          //согласно условию задачи

      b:=0.8;

      n:=20;

      h:=(b-a)/(n-1);  //расчет размера шага 

      while a<=(b+h) do // создание цикла

            begin

                 a:=a+h;

                 f1:=(a*a*a-27)/(a*a+1);// расчет функции

                 f:=Exp(f1*Ln(cos(a)/sqrt(a)));// по частям

                 W:=W+f;

            end;

            writeln('Summa=' , W:2:4); // вывод результата

      a:=0.5;

      f1:=0;

      f:=0;    // обнуление

      R:=0;

      S:=0;

      repeat

             a:=a+h;

             f1:=(a*a*a-27)/(a*a+1);

             f:=Exp(f1*Ln(cos(a)/sqrt(a)));

             R:=R+f;

             S:=S+1;

      Until S>=n;

            writeln('Summa=',R:4:4); // вывод результата

      a:=0.5;

      f1:=0;

      f:=0;

      FT:=0;

      S:=0;

      For i:=1 to n do// создание цикла

            begin

                 a:=a+h;

                 f1:=(a*a*a-27)/(a*a+1);

                 f:=Exp(f1*Ln(cos(a)/sqrt(a)));

                 FT:=FT+f;

            end;

      writeln ('Summa=' ,FT:4:4);// вывод результата

     a:=0.5;

      f1:=0;

      f:=0;

      FD:=0;

      For i:=n Downto 1 do// создание цикла

            begin

                  a:=a+h;

                  f1:=(a*a*a-27)/(a*a+1);

                  f:=Exp(f1*Ln(cos(a)/sqrt(a)));

                  FD:=FD+f;

            end;

       writeln ('Summa=' ,FD:4:4);// вывод результата

       writeln ('‚Суммы равны’);

       readln;

end.

В ходе программы  рассчитывается одна функция на заданном интервале. Суммируются все результаты с шагом  h. Чтобы избежать составления большого выражения, я разбил исходную функцию на f1 и f.  Подсчет суммы всех значений производился согласно условию. Результаты приводятся ниже:

Ответы на вопросы:

Опишите оператор For…To…Do… ,  в чем его основные отличия от остальных циклов Pascal? – Это оператор, который организует цикл. Для его выполнения необходимо заранее знать количество исполнений какой-либо операции. Имеет структуру: For минимальный параметр:=значение To максимальное значение параметра Do выполнение оператора, тело цикла.

Задание № 3. Массивы и подпрограммы

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

Задание в зависимости  от варианта связано с действиями либо над матрицей m[n, k], у которой количество строк n и столбцов k может быть от двух до десяти, либо над  квадратной матрицей m[n, n], у которой количество строк и столбцов равно n (2 ≤ n ≤10). Таким образом, в программе должен быть предусмотрен ввод пользователем количества строк и столбцов матрицы при исполнении программы.

Также, в зависимости от варианта компоненты, матрицы могут быть либо вещественного, либо целого типа. Значения компонент матрицы следует задавать случайным образом в таком диапазоне, чтобы получаемые данные были нетривиальными, т.е. неочевидными, не лежащими на поверхности. В каждом варианте приведён пример аналитического (без использования программирования) решения частной задачи этого варианта. Целью этих примеров является пояснение непонятных мест в задании варианта. Во всех примерах в квадратных скобках указываются номера строк и (или) столбцов компонент матрицы.

В соответствии с вариантом, задание имеет вид:

Найти максимальное значение компонент вещественной матрицы m[n, k].

Подсчитать  количество компонент матрицы m[n, k], совпадающих с максимумом.

Записать в  одномерный массив v[q] значения: −1, если сумма индексов максимальной компоненты матрицы m[n, k] является нечётным числом, и 1 — если чётным числом.

Заменить в  матрице m[n, k] максимальные компоненты единицами.

На экран  вывести исходную матрицу m[n, k], значение максимума, количество максимумов, массив v[q], изменённую матрицу m[n, k].

Решение:

Program Z3;

uses

  crt;

var  M1:array[1..10,1..10] of real; // создание исходного массива 

     N,m:integer;

     V:array[1..10] of integer;

     LenV:integer;

procedure initM(K,L:integer); // процедура генерации массива 

var i,j:integer;

begin

randomize;

for i:=1 to K do

for j:=1 to L do

  M1[i,j]:=(random(20)-j/2);

end;

procedure OutM(K,L:integer); // процедура вывода массива 

var i,j:integer;

begin

for i:=1 to K do

  begin

   for j:=1 to L do

    write(M1[i,j]:7:2);

   writeln;

   end;

end;

function FindMax(K,L:integer):real;// функция поиска максимума 

var i,j:integer;

max1:real;

begin

max1:=m1[1,1];

for i:=1 to K do

for j:=1 to L do

   if m1[i,j]>max1 then

    begin

     max1:=m1[i,j];

    end;

FindMax:=max1;

end;

Function CountMax(K,L:integer):integer;//подсчет количества элементов

var i,j,Count:integer;                              //совпавших с максимумом

    max:real;

begin

Count:=0;

LenV:=1;

max:=FindMax(K,L);

for i:=1 to K do

for j:=1 to L do

  if M1[i,j]=max then

  begin

   if (i+j) mod 2=0 then v[LenV]:=1 else v[LenV]:=-1; {заполнение одномерного массива }

   M1[i,j]:=1;

   inc(LenV);

   inc(Count);

  end;

CountMax:=Count;

end;

procedure OutMasV;// процедура вывода одномерного массива

        var i:integer;

            begin

            for i:=1 to LenV-1 do

            write(v[i]:3);

        writeln;

end;

begin clrscr;

        writeln('‚Введите размеры матрицы M ');

        readln(n,m);

        initM(n,m);

        writeln('Исходная матрица :');

        OutM(n,m);

        writeln('Значение максимума  = ',FindMax(n,m):1:3);

        writeln(Количество максимумов = ',CountMax(n,m));

        writeln(Массив V[q]:');

        OutMasV;

        writeln('Измененная матрица : ');

        OutM(n,m);

readln;

end.

Результат работы программы  полностью удовлетворяет заданию  – программа основана на использовании процедур и функций. Результат приводятся ниже:


Информация о работе Программирование на языке Паскаль