Программирование на языке высокого уровня 2

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

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

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

«Уфимский государственный авиационный технический университет»

ФИЛИАЛ В ГОРОДЕ СТЕРЛИТАМАКЕ



КАФЕДРА ЕСТЕСТВЕННО-НАУЧНЫХ И ОБЩЕПРОФЕССИОНАЛЬНЫХ ДИСЦИПЛИН



















ПОЯСНИТЕЛЬНАЯ ЗАПИСКА



к расчетно-графической работе по Информатике





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

















2403.402103.000ПЗ

(обозначение документа)









Группа СПС-102з

Фамилия И.О.

Подпись

Дата

Оценка

Студент

Камалеев Э.С.







Проверил















Стерлитамак 2010 г.

Содержание



1	Задание 1	2

		1.1	Постановка задачи	2

		1.2	Блок-схема программы	2

		1.3	Исходные данные для отладки и тестирования программы	3

		1.4	Исходный текст программы	3

		1.5	Экранная форма программы	4

2	Задание 2	5

		2.1	Постановка задачи	5

		2.2	Блок – схема программы	5

		2.3	Исходные данные для отладки и тестирования программы	7

		2.4	Исходные данные программы	7

		2.5	Экранная форма программы	8

3	Задание 3	9

		3.1	Постановка задачи	9

		3.2	Блок-схема программы	9

		3.3	Исходные данные для отладки и тестирования программы	11

		3.4	Исходный текст программы	11

		3.5	Экранная форма программы	12

4	Задание 4	13

		4.1	Постановка задачи	13

		4.2	Блок-схема программы	13

		4.3	Исходные данные для отладки и тестирования программы	17

		4.4	Исходный текст программы	17

		4.5	Экранная форма программы	19





Задание 1



Постановка задачи



Даны действительные числа х и у, не равные друг другу. Меньшее из этих двух чисел заменить половиной их суммы, а большее – их удвоенным произведением.

Блок-схема программы



начало









a, b









a=b



+

-









Числа равны! Введите разные числа.

















a>b

+

-







c:=2*a*b;

d:=(a+b)/2;























Рисунок 1. Блок-схема действий над числами

Продолжение рис.1.







a<b

+

-

c, d







c:=(a+b)/2;

d:=2*a*b;























конец









Рисунок 1. Блок-схема действий над числами



Исходные данные для отладки и тестирования программы



В качестве исходных данных выберем произвольные 2 действительных числа a, b и проверим работу программы, нажав на кнопку «Выполнить».

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



Исходный текст программы



procedure TForm1.Button1Click(Sender: TObject);

var a,b,c,d:real;

begin

a:=StrToFloat(Edit1.Text);

b:=StrToFloat(Edit2.Text);

if (a=b) then ShowMessage('Числа равны! Введите разные числа.');

if (a>b) then begin

c:=2*a*b;

d:=(a+b)/2;

end ;

if (a<b)then

 begin

c:=(a+b)/2;

d:=2*a*b;

end;

Edit3.Text:=FloatToStr(c);

Edit4.Text:=FloatToStr(d);

end;

Экранная форма программы







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




Задание 2



Постановка задачи



Протабулировать функцию заданной формулой:





где с=4, a=2.8, b=-0.3, , h=0.05.



Блок – схема программы



начало

a, b, h

-



















x:=a, a1:=2.8; b1:=-0.3; c1:=4;







x<=b





-

+









x<1.2

+







конец



y:=a1*x*x+b1*x+c1

















Рисунок 3. Блок-схема табулирования функции



x=1.2

y:=a1/x+sqrt(x*x+1)

+

-

x, y

x:=x+h

x>1.2

y:=(a1+b1*x)/sqrt(x*x+1)

+

-Продолжение Рис.3.













































































	Рисунок 3. Блок-схема табулирования функции

	

	

Исходные данные для отладки и тестирования программы



В качестве исходных данных выберем значения a=1, b=2, h=0.05 и  проверим работу программы, нажав кнопку «Табулировать». 

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

	

	

	

	

Исходные данные программы



	procedure TForm1.Button1Click(Sender: TObject);

	var

	a,b,a1,b1,c1,h,x,y:extended;

	begin

	a:=StrToFloat(Edit1.Text);

	b:=StrToFloat(Edit2.Text);

	h:=StrToFloat(Edit3.Text);

	a1:=2.8;

	b1:=-0.3;

	c1:=4;

	x:=a;

	Memo1.Clear;

	Memo1.Lines[0]:=' x | y ';

	Memo1.Lines.Add('----------');

	while x<=b do begin

	if (x<1.2)  then   y:=a1*x*x+b1*x+c1;

	if (x=1.2) then y:=a1/x+sqrt(x*x+1);

	if (x>1.2) then y:=(a1+b1*x)/sqrt(x*x+1);

	Memo1.Lines.Add(FloatToStrf(x,fffixed,5,2)+'|'+FloatToStrf(y,fffixed,5,2));

	x:=x+h;

	end;

	end;

	

	

	

	

	

	

	

	

	

	

Экранная форма программы

	

	





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


Задание 3

Постановка задачи

	1.  Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-10,20]. Найти сумму элементов, имеющих нечетные индексы. 

	2.  Подсчитать количество элементов массива, значения которых больше заданного числа А и кратных 5. 

	3.Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.

	

Блок-схема программы

	

	

Начало

n

i:=1, n, 1

a[i]:=Random(30)-10

a[i]

конец

















































Рисунок 5. Блок-схема процедуры заполнения массива случайными числами

	

	

конец

начало

a1

sum:=0; k:=0

i:=1,n,1

i mod 2<>0

+

sum:=sum+a[i]

-

Выполнить 1 действие? 

+

sum

-

i:=1,n,1

a[i]>a1,

a[i] mod 5=0

+

k:=k+1

-

Выполнить 2 действие? 

+

k

-

l:=0

i:=n,1,1

a[i]<0

abs(a[i]) mod 5 = 2

+

l:=i

Выполнить 3 действие? 

+

l

-

-

	















































































		

	Рисунок 6. Блок-схема процедуры для необходимых вычислений и вывода результатов на экран

Исходные данные для отладки и тестирования программы



В качестве исходных данных вводим любое целое число n – количество элементов массива и, нажав на кнопку «Создать массив», формируем одномерный массив, заполненный случайным образом целыми числами из промежутка [-10,20].

При нажатии на кнопку «Выполнить» происходит вычисление, заданные в задании.

Результаты можно посмотреть в рабочем окне программы рис. 7



Исходный текст программы



Описание глобальных переменных

 

var

  Form1: TForm1;

  n:integer;

  a:array of integer;



Текст процедуры для задания массива случайными числами.



procedure TForm1.Button1Click(Sender: TObject);

var

i:integer;

begin

Randomize;

n:=StrToInt(Edit1.Text);

SetLength(a,n);

Edit2.Clear;

for i:=1 to n do

begin

a[i]:=Random(30)-10;

Edit2.Text:=Edit2.Text+' '+IntToStr(a[i]);

end;

end;                            



Текст процедуры для вычислений и вывода результатов на экране



procedure TForm1.Button2Click(Sender: TObject);

var

sum,i,k,l,a1:integer;

begin

  Edit3.Clear;

  Edit4.Clear;

  Edit5.Clear;

  a1:=StrToInt(Edit6.Text);

  sum:=0;

  k:=0;

  For i:=1 to n do

  if (i mod 2<>0) then sum:=sum+a[i];

  If CheckBox1.Checked then Edit3.Text:=IntToStr(sum);

   For i:= 1 to n do begin

  if (a[i]>a1) and (a[i] mod 5=0) then k:=k+1;

  end;

  if CheckBox2.Checked then Edit4.Text:=IntToStr(k);

  l:=0;

  for i:=n downto 1 do begin

  if (a[i]<0) and (abs(a[i]) mod 5 = 2) then l:=i;

  end;

  If CheckBox3.Checked then Edit5.Text:=IntToStr(l);

  end;



                 

Экранная форма программы







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

	

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

	

	

	

	http://wiki.lazarus.freepascal.org  - Lazarus wiki энциклопедия по Free Pascal Compiler/Lazarus

	http://lazarus.freepascal.org - Официальный сайт проекта Lazarus

	Бобровский С.И.,lazarus. Учебный курс (пособие для самообразования), 2005г.

	Информатика: Учебник для вузов.- / Под ред. С.В. Симоновича. – СПб.: Питер, 2008.