Алгоритмічні мови програмування

Контрольна робота з теми:

“Алгоритмічні мови програмування”









Студентка групи Пзс-402

Казюка Олена


Завдання №1. Скласти блок схему та програму обчислення значення функції y=f(x) у точці x0 з точністю . Вхідні дані x0та a містяться у самій програмі, точність вводиться з клавіатури.



№ варіанту

F (x)

X0

A



13



0.4652



0.000001



Текст програми.

//Программа вычисления значения функции

#include<iostream.h> //Открытие библиотек

#include<conio.h>

#include<stdio.h>

#include <math.h>

const double PI=3.1415926; //Ввод константы

main()

{

cout<<"\n"<<"**********Программа вычисления значения функции F(x)*********";

float x,a,y; //Описание переменных

int epsilon;

x=0.4652; //Описание переменных первого порядка

a=PI/6;

cout<<"\n"<<" Сколько знаков после запятой вывести на экран ";

scanf("%d",&epsilon); //Считать число знаков epsilon

y=1-(cos(x-a))/(sqrt(a+(cos(x+a)/sin(x+a))))+exp(a*x); //функция, значение которой надо найти

printf("%.*f\n",epsilon,y);

cout<<"\n"<<" Нажмите любую клавишу";

getch(); //Считать символ с клавиатуры

return 0;

}

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

**********Программа вычисления значения функции F(x)*********

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

1.357433

Нажмите любую клавишу

Блок-схема№1 до завдання №1





Початок









Ввести













a=;

x=0.4652;

.











Вивести y.







Кінець




Завдання №2. Використовуючи схему Горнера обчислити два значення поліному. Скласти блок-схему та програму. У програмі передбачити можливість введення вхідних даних як з клавіатури, так і з файлу INPUT.TXT, що міститься в поточній директорії, та використання функцій або процедур користувача.



№ варіанту

Поліном

Значення x

13



x1=0,321; x2=-0,889



Текст програми.

//Программа вычисления значения полинома

#include <stdio.h> //подключение библиотек

#include <conio.h> //библиотека считывания значений с клавиатуры

float y (float x); //объявление функции

int main(void)

{

float x1,x2,y1,y2; //описание переменных

int a,b;

FILE *infile; //показатель на структуру типа FILE

printf("\n*****Программа вычисления значения полинома*****");

printf("\nСколько знаков после запятой вывести на экран? ");

scanf("%d", &a); //Считывается с клавиатуры точность выведения

printf("\nВвести значение Х: \n 1) из файла");

printf("\n 2) с клавиатуры\n");

scanf("%d", &b); //считывание с клавиатуры начальных данных

if (b == 1) //указание на то, что b равно 1

{

if ((infile = fopen("input.txt", "rt"))== NULL)

{ //открыли файл для чтения

fprintf(stderr, "Нельзя открыть файл.\n");//Выдаёт сообщение при ошибке

return 1;

} //открытие файла

fscanf (infile, "%f",&x1);

fscanf (infile, "%f",&x2);

} //считывание значений х1 и х2 из файла input.txt

else

{

printf("Введите значение Х1\n"); //считывание значений х1 и х2 с клавиатуры

scanf("%f", &x1);

printf("Введите значение Х2\n");

scanf("%f", &x2);

};

y1 = y(x1);

y2 = y(x2);

printf("\nЗначение полинома в точке X1=", x1);

printf("%.*f\n",a, y1);

printf("Значение полинома в точке X2=", x2);

printf("%.*f\n",a, y2);

printf("\nНажмите любую клавишу на клавиатуре");

getch(); //читается символ с клавиатуры

fclose(infile); //Закрывается файл input.txt

return 0; //Завершение работы программы

}

float y (float x) //обозначение функции вычисления полинома

{

return ((((2.4*x+4.6)*x+6.8)*x+8.0)*x+0.2)*x+2.4;//сама функция (полином)

}

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

*****Программа вычисления значения полинома*****

Сколько знаков после запятой вывести на экран? 6

Ввести значение Х:

1) из файла

2) с клавиатуры

2

Введите значение Х1

0.321

Введите значение Х2

-0.889

Значение полинома в точке X1=3.570466

Значение полинома в точке X2=5.307651

Нажмите любую клавишу на клавиатуре


Блок-схема до завдання №2





Початок



Введення точності

результату

epsilon

так

ні











Вводити

значення Х

з файлу?





x1, x2





x1, x2







y: = 



Виведення

значення y1, y2

з заданою точністю

Кінець



















Завдання №3. Скласти блок-схему та програму табулювання функції на проміжку [a, b] з заданим кроком h з використанням циклу з після умовою. Програма, крім того, повинна побудувати графік функції на вказаному проміжку з побудовою всіх точок, обчислених при табулюванні.



№ варіанту

Функція

a

b

h

13



1

6

0.2


Текст програми.

// Программа табуляции функции на

// промежутке с заданным шагом и построением графика

#include <stdio.h> //Открытие библиотечных функций

#include <graphics.h> //Функция подключения графики

#include <math.h> //Функция подключения математических вычислений

#include <conio.h> //Чтение символов с клавиатуры

float F (float x); //Объявление функции Y

int main()

{

float a,b,h,y,max,i; //Описание переменных

int gerr;  //Ошибка графики

int g_driver, g_mode; //Графический драйвнр и режим

int XMAX, YMAX,j; //Ширина и высота графика

char msg[5];

printf("*****Программа табуляции функции Y на промежутке [a,b] с шагом h*****\n");

printf("\nВведите значение начала табуляции: а = ");

scanf("%f", &a);

printf("\nВведите значение конца табуляции: b = ");

scanf("%f", &b);

printf("\nВведите значение шага табуляции: h = ");

scanf("%f", &h);

i=a; max=0;

do

{

y=F(i); //табуляция Y

if (fabs(y)>max) max=fabs(y);

printf("\nx = %.3f\t y = %.3f", i, y);//Выведение значения У на экран

i=i+h;

}

while (i <= b);

printf("\n\nДля выведения графика нажмите любую клавишу");

getch();

detectgraph(&g_driver, &g_mode); //Определение графического адаптера и графического режима

initgraph(&g_driver, &g_mode, ""); //Инициализация графической системы

if ((gerr = graphresult()) != grOk)

printf("\nОшибка графики: %s\n", grapherrormsg(gerr)); //Выдача сообщения об ошибке

cleardevice(); //Очистка экрану

XMAX=getmaxx(); YMAX=getmaxy(); //Определение максимальных значений X и Y

setbkcolor(0); //Установка цвета фона

setcolor(14); // Установка текущего цвета рисования

setlinestyle(0,0,2); // Установка стиля линий: тип - сплошная, толщина=2

line(0,YMAX/2,XMAX,YMAX/2);//Построение осей координат

line(XMAX,YMAX/2,XMAX-10,YMAX/2-10);

line(XMAX,YMAX/2,XMAX-10,YMAX/2+10);

line(XMAX/2,0,XMAX/2,YMAX);

line(XMAX/2,0,XMAX/2-10,10);

line(XMAX/2,0,XMAX/2+10,10);

i=a;

j=0;

settextstyle(1,0,0);

setusercharsize(1, 1, 3, 2);

do

{

y=F(i);

setcolor(14);

setlinestyle(1,0,3);

circle(j*XMAX*h/(b-a),(YMAX/2-y*YMAX/(2*max)),2); //Выведение точек табуляции

sprintf(msg, "%.2f", i);

outtextxy(j*XMAX*h/(b-a),YMAX/2,msg); //Значения на оси Х

setcolor(15);

setlinestyle(0,0,2);

line(j*XMAX*h/(b-a), YMAX/2-3,j*XMAX*h/(b-a), YMAX/2+3); //Розметка на оси Х

j=j+1;

i=i+h;

}

while (i <= b);

for (i=a,j=0; i<=b;j++, i=i+(b-a)/XMAX) //Выведение всех точек на промежутке [a,b]

putpixel(j,(YMAX/2-F(i)*YMAX/(2*max)),14);

getch(); //Чтение символа с клавиатуры

closegraph(); //Закрытие графического режима

return 0; //Завершение работы программы

}

float F (float x) //Вычисление функции в заданной точке X

{

return exp(1/sin(x)); //Сама функция

} //Конец программы

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

*****Программа табуляции функции Y на промежутке [a,b] с шагом h*****

Введите значение начала табуляции: а = 1

Введите значение конца табуляции: b = 6

Введите значение шага табуляции: h = 0.2

x = 1.600 y = 2.719

x = 1.800 y = 2.792

x = 2.000 y = 3.003

x = 2.200 y = 3.445

x = 2.400 y = 4.395

x = 2.600 y = 6.958

x = 2.800 y = 19.790

x = 3.000 y = 1195.346

x = 3.200 y = 0.000

x = 3.400 y = 0.020

x = 3.600 y = 0.104

x = 3.800 y = 0.195

x = 4.000 y = 0.267

x = 4.200 y = 0.317

x = 4.400 y = 0.350

x = 4.600 y = 0.366

x = 4.800 y = 0.366

x = 5.000 y = 0.352

x = 5.200 y = 0.322

x = 5.400 y = 0.274

x = 5.600 y = 0.205

x = 5.800 y = 0.116

x = 6.000 y = 0.028

Для выведения графика нажмите любую клавишу.


Графік для завдання №3






Блок-схема для завдання № 3





Початок





a, b, h





















i := i + h;



y(i);

закриття 

графічної системи

Кінець



Виведення графіка функції 

 на екран

ініціалізація графічної системи

ні

так

i <= b




































Завдання №4. Скласти блок-схему та програму розв’язання задачі, згідно свого варіанту. Програма повинна передбачити можливість введення вхідних даних як з клавіатури, так і з файлу ZAD4.DAT. Результати роботи повинні виводитись як на екран, так і у файл ZAD4.REZ.

Вхідні данні, розміщені у текстовому файлі, мають такий формат:

спочатку в одному рядку через пропуск йдуть два числа M та N –розмірність матриці, якщо матриця прямокутна та одне число N – якщо матриця квадратна;

далі у M (N для квадратної матриці) рядках через пропуск йдуть N- чисел – дані відповідних комірок матриці;

якщо в умові є вказівки, то у вказаному форматі можуть бути зміни.

Вхідні дані повинні мати формат, передбачений умовою задачі.



№ варіанту

Умова задачі

13

У квадратній матриці знайти кількість нульових елементів, для яких сума індексів парна.



				Текст програми.

		#include <stdio.h>

		#include <conio.h>

		#include <math.h>

		#include <stdlib.h>

		void main(){

		int ar[20][20],i,j,a,e,l,m,sum;

		div_t x;

		clrscr();printf("\n Програма визначення нульових елементўв матрицў\n");

		printf ("\n ввести матрицю з клавiатури(1) чи з файлу zad4.dat(2):");

		scanf ("%d",&a);

		if (a==1)

		{printf("введтiь розмiрнiсть квадратноi матрицi:");

		scanf("%d",&e);clrscr();

		for (j=0;j<e;j++)

		{for(i=0;i<e;i++)

		{ printf("\n Введiть[%d][%d] елемент матрицi:",j+1,i+1);

		scanf("%d",&ar[i][j]);clrscr();

		}}}else {

		FILE *fp;

		fp=fopen("zad4.dat","r");

		if (fopen("zad4.dat","r")==NULL)

		{printf("\n не можу вiдкрити файл");

		goto end;}else{

		fscanf(fp,"%d",&e);

		for (j=0;j<e;j++)

		{for (i=0;i<e;i++)

		{ fscanf(fp,"%d",&ar[i][j]);

		}}fclose(fp);

		}}

		printf("\n Mатриця виглядить так:\n");

		for (j=0;j<e;j++)

		{ printf("\n ");

		for(i=0;i<e;i++)

		{printf("%d ",ar[i][j]);

		}} j=0;i=0;sum=0;

		for (j=0;j<e;j++){

		for(i=0;i<e;i++)

		{m=i+j;

		x = div(m,2);

		if(x.rem==0)

		{if (ar[i][j]==0){sum++;}}}}

		printf("\n нульових елементўв матрицў=%d",sum);

		FILE *fp;

		fp=fopen("zad4.res","w");

		fprintf(fp,"\n нульових елементўв матрицў=%d",sum);fclose(fp);

		printf("\n Результат у файлi zad4.res ");

		end:

		printf("\n press anykey ");

				getch(); clrscr();}

				Результат виконання.

		Програма визначення нульових елементів матриці ввести матрицю з клавiатури(1) чи з файлу zad4.dat(2):2

		Матриця виглядить так:

		3 1 2 3

		4 5 6 7

		8 9 10 11

		12 13 14 15

		нульових елементів матриці=0

		Результат у файлi zad4.res

		press any key

				
Блок-схема

				

Початок









Вводити вхідні данні з клавіатури



			Так	ні





введення

вхідної 

матриці з клавіатури

зчитування

матриці 

з файлу zad4.dat















Умова знаходження кількості нульових елементів









Виведення даних в файл



Виведення даних на екран











Кінець




Список використаної літератури



1. Петров В.Н. Информационные системы. – СПб.: Питер, 2002.

2. Культин Н.Б. Программирование на Object Pascal в Delphi5. – Спб.: БХВ – Санкт – Петербург, 2000.

3. Жоголев Е.А. Введение в технологию программирования. - М.:"ДИАЛОГ МГУ", 1998.