Информационные системы и технологии

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    92,86 Кб
  • Опубликовано:
    2013-08-17
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Информационные системы и технологии















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

«Информационные системы и технологии»

Вариант 6

Задание 1. Ввести массив А(5)=(2.0 , 0, 0.6664, 0, 0.4150) и использовать его для вычисления ln x по формуле


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

По условию задания требуется произвести вычисления логарифма, используя в ряд Тейлора. Известное разложение логарифмической функции в окрестности точки Х = 0 имеет вид:

.

или .

Однако вычислять логарифм с помощью знакочередующегося ряда, который сходится очень медленно, крайне затруднительно. Например, чтобы найти ln 2 с точность 0,00001 потребуется сложить 100 000 членов ряда, то есть выполнить сто тысяч итераций. Поэтому используется вспомогательное разложение:

из которого путем преобразований получается заданная формула:

.

Каждое слагаемое под знаком суммы есть произведение заданного коэффициента на целую нечетную степень постоянного числа u. Оформим вычисление u отдельной подпрограммой в виде функции. Тип функции выбираем Real, так как значение u является заведомо дробным числом:

FRACT(x:real):real; {объявление функции}

const: real = 1.414213562373; {константа корень из 2}{начало функции}:=(2*x-c)/(2*x+c);; {конец функции}

Для вычисления логарифма используем накапливаемую сумму, к которой в завершение прибавляем константу b = -0.5*ln(2). Для вычисления степени числа u используем накапливаемое произведение, поскольку в общем случае uk = uk-1*u, т. е. uk есть произведение предыдущей степени числа на само число. Формально для нахождения результата требуется выполнить 3 итерации, при которых k примет значения 0, 1 и 2. При этом 2k + 1 примет значения 1, 3 и 5. Однако, учитывая два нулевых значения массива А(5) (при которых сумма не будет увеличиваться, а произведение продолжит считаться), рациональнее выполнить цикл из 5-ти итераций. Тогда переменная цикла будет служить индексом для вызова очередного значения А(5) и для нахождения степени u не потребуется создания дополнительной функции. Тип функции выбираем Real:

function LOG(x:real):real; {объявление функции}

const: array [1..5] of real = (2.0 , 0, 0.6664, 0, 0.4150);

{объявление массива}:real = -0.5*ln(2); {константа b},Pr_u,Sum:real;


Разработаем структуру программы:

1.     Очистка экрана от результатов предыдущих программ и вычислений.

2.       Ввод числа x > 0.

.         Остановка программы при вводе числа меньше либо равного нулю, так как нахождение логарифма в этом случае не имеет математического смысла.

.         Вывод значения ln x путем обращения к функции LOG и из функции LOG к функции FRACT.

В качестве параметра в обе функции будет передаваться значение х. Текст программы при этом будет небольшим:

Begin {начало программы}; {очистка экрана}

Write('zadaite thislo x = '); {ввод числа}(x);x<=0 then begin('Halt!!!'); {не корректный ввод}; {остановка программы};('LN(',x,') = ',LOG(x):1:5);

readln; {ожидание нажатия клавиши Enter}. {конец программы}

Сравнивая результаты работы программы со значениями, найденными на калькуляторе, следует заметить, что приемлемая точность вычисления логарифма обеспечивается только при небольших значениях х.

задача логарифм строка функция

Задание 2. Заполнить случайными числами 3 матрицы размерностью (n×n). Найти в каждой из них строку, с наибольшей суммой.

Решение

Разработаем структуру программы. Вначале надо выполнить ввод с клавиатуры числа n, задающего размерность массивов. Затем с каждым из массивов следует проделать следующие действия:

.         Заполнить случайными числами.

.         Вывести на экран заполненные массивы.

.         Подсчитать суммы строк и найти наибольшую в каждом массиве.

.         Вывести на экран строки найденные строки.

Первое и второе действия можно объединить, поэтому необходимо написать 3 подпрограммы. В качестве параметра в подпрограммы будет передаваться одномерный массив, состоящий из трех двухмерных массивов a:array [1..3] of Mas. Технически проще было бы сразу объявить трехмерный массив размером (n×n×3), но это противоречило бы условию задачи, т.к. требуется задать три массива.

Две подпрограммы оформлены в виде процедуры Zap_Wrt, заполняющей и печатающей массив и Wiw_Wrt, печатающей строку массива с максимальной суммой. Третья подпрограмма оформлена в виде функции, которую во время своей работы использует вторая процедура Wiw_Wrt. Это позволяет сократить рабочую часть программы до семи строк:

Readln(n);i := 1 to 3 do begin

Zap_Wrt(a[i],n); {заполнение и печать i-го массива}_Wrt(a[i],n); {печать строки с максимальной суммой}; {печать разделительной строки}

end;

Полный текст программы представлен ниже:

STROKA; {название программы}crt; {открытие библиотеки процедур}

Type= array [1..100,1..100] of Integer;:array [1..3] of Mas;

n,i,j: byte;

{Процедура заполнения}

Procedure Zap_Wrt (Var d: Mas;n:integer);,m: byte;k := 1 to n do beginm := 1 to n do begin[k,m] := random(100);(d[k,m]:5);

end;;;;

{Функция поиска строки с максимальной суммой}

Function sum_max (d: Mas;n:integer):byte;,m,i_max: byte;:array[1..100] of real;_max:real;k := 1 to n do begin[k]:=0;m := 1 to n do[k]:=s[k]+d[k,m];k=1 then begin_max:=s[k];_max:=1;;s_max<s[k] then begin_max:=s[k];_max:=k;

end;;_max:=i_max; {функции присваивается значение номера строки с максимальной суммой};

{Процедура печати строки с максимальной суммой}

Procedure Wiw_Wrt (d: Mas;n:integer);,m: byte;:=sum_max(d,n);('Stroka-maximum: ');m := 1 to n do(d[k,m]:5);;

End;

Write('Wwedite rasmer n<=100 ');(n);i := 1 to 3 do begin

Zap_Wrt(a[i],n); {заполнение и печать i-го массива}_Wrt(a[i],n); {печать строки с максимальной суммой i-го массива};;. {конец программы}

Пример работы программы для трех массивов размером (5×5):

c,d : integer;P (x,y : integer);y:=x+1 end;Q (x : integer; var y : integer);y:=x+1 end;R (var x, y : integer); y:=x+1 end;

begin

c:=15: d:=4; P(c+d, d); writeln (d);:=15; d:=4; Q(c+d, d); writeln (d);:=15; d:=4; R(c+d, d); writeln (d);:=15; d:=4; R(c, d); writeln (d);

Решение

В процедуре P используются формальные параметры - значения, следовательно, не зависимо от содержимого процедуры, фактический параметр d не изменится (он останется равным 4).

В процедуре Q формальный параметр y - параметр-переменная, он при выполнении процедуры изменяет свое значение, становится равным x+1. При этом x получает значение c+d=15+4=19. Подставляем значение 19 в выражение: x+1 = 19+1= 20. Это и есть итоговое значение d по возвращении в головную программу.

В процедуре R формальные параметры - переменные, следовательно, фактическим параметром не может быть выражение. В этом случае имеет место синтаксическая ошибка. При 2-м вызове процедуры R формальные параметры x и y изначально получают значения c и d, т. е. 15 и 4 соответственно. Параметр y при выполнении процедуры изменяется y:=x+1=15 + 1 = 16.

Ответ: 4, 20, синтаксическая ошибка, 16.

Библиографический список

a.   Попов, В. Б. Тurbo Pascal для школьников [Текст] /

.     В. Б. Попов. - М. : Финансы и статистика, 2004. - 525 с.

a.   Епанешников, А. М. Программирование в среде Turbo-Pascal 7.0. [Текст] / А. М. Епанешников, В. А. Епанешников. М. : Диалог МИФИ, 2003. - 288 с.

b.       Культин, Н. В. Tupbo-Pascal в задачах и примерах [Текст] / Н. В. Культин. СПб. : БХВ Санкт -Петербург, 2005. -156 с..     Марченко, А. И. Программирование в среде Turbo-Pascal 7.0. [Текст] / А. И. Марченко, Л. А. Марченко. - Киев : ВЕК+, М.: Бином Универсал, 2008. - 496 с.

Похожие работы на - Информационные системы и технологии

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!