Контрольная работа: Алгоритмічні мови програмування: мова С
Міністерство освіти і науки України
Бердичівський політехнічний коледж
Контрольна робота
з предмету “Алгоритмічні мови програмування: мова С”
2010 рік.
Завдання до контрольної роботи №2.
Завдання №1. Скласти блок схему та програму обчислення значення функції y=f(x) у точці x0 з точністю
. Вхідні дані x0та a містяться у самій програмі, точність вводиться з клавіатури.
| № варіанту |
F (x) |
X0 |
A |
|
| 2 |
|
1.2876 |
|
0.00001 |
Завдання №2. Використовуючи схему Горнера обчислити два значення поліному. Скласти блок-схему та програму. У програмі передбачити можливість введення вхідних даних як з клавіатури, так і з файлу INPUT.TXT, що міститься в поточній директорії, та використання функцій або процедур користувача.
| № варіанту | Поліном | Значення x |
| 2 |
x5-2.22x4+3.33x3-4.44x2+5.55x-6.66 |
x1=0.111; x2=-0.999 |
Завдання №3. Скласти блок-схему та програму табулювання функції на проміжку [a, b] з заданим кроком h з використанням циклу з після умовою. Програма, крім того, повинна побудувати графік функції на вказаному проміжку з побудовою всіх точок, обчислених при табулюванні.
| № варіанту | Функція | a | b | h |
| 2 |
|
0 | 1 | 0.25 |
Завдання №4. Скласти блок-схему та програму розв’язання задачі, згідно свого варіанту. Програма повинна передбачити можливість введення вхідних даних як з клавіатури, так і з файлу ZAD4.DAT. Результати роботи повинні виводитись як на екран, так і у файл ZAD4.REZ.
Вхідні данні, розміщені у текстовому файлі, мають такий формат:
-
спочатку в одному рядку через пропуск йдуть два числа M та N –розмірність матриці, якщо матриця прямокутна та одне число N – якщо матриця квадратна;
-
далі у M (N для квадратної матриці) рядках через пропуск йдуть N- чисел – дані відповідних комірок матриці;
-
якщо в умові є вказівки, то у вказаному форматі можуть бути зміни.
Вхідні дані повинні мати формат, передбачений умовою задачі.
-
№ варіанту Умова задачі 2 У квадратній матриці підрахувати кількість невід’ємних елементів під головною діагоналлю.
Завдання №1. Скласти блок схему та програму обчислення значення функції y=f(x) у точці x0 з точністю
. Вхідні дані x0та a містяться у самій програмі, точність вводиться з клавіатури.
| № варіанту | F (x) |
X0 |
A |
|
| 2 |
|
1.2876 |
|
0.00001 |
Відповідь №1.
Текст програми.
/*Задача №1 програма вычисления значения функции*/
#include<conio.h> /*Для ввода символов с клавиатуры*/
#include<stdio.h>
#include <math.h> //Для ввода математических функций
const double PI=3.1415926; /*Ввод константы*/
main() /*Начало программы*/
{
printf(«n**********Программа вычисления значения функции F(x)*********»);
float x,a,y; /*Описание переменных*/
int epsilon;
x=1.2876; /*Описание переменных первого порядка*/
a=PI/3;
printf(«nСколько знаков после запятой вывести на экран «);
scanf(«%d»,ε); /*Считать число знаков epsilon*/
y=(cos(x+3*a)/sin(x+3*a))/sqrt(1+(sin(x+1.5*PI)*sin(x+1.5*PI)));
printf(«%.*fn»,epsilon,y);
printf(«n Нажмите любую клавишу»);
getch();/*Считать символ с клавиатуры*/
return 0;
}
Результати виконання програми.
**********Программа вычисления значения функции F(x)*********
Сколько знаков после запятой вывести на экран 5
0.28028
Нажмите любую клавишу
Блок-схема№1 до завдання№1.
Завдання №2. Використовуючи схему Горнера обчислити два значення поліному. Скласти блок-схему та програму. У програмі передбачити можливість введення вхідних даних як з клавіатури, так і з файлу INPUT.TXT, що міститься в поточній директорії, та використання функцій або процедур користувача.
| № варіанту | Поліном | Значення x |
| 2 |
x5-2.22x4+3.33x3-4.44x2+5.55x-6.66 |
x1=0.111; x2=-0.999 |
Відповідь №2
Текст програми.
/*Задание №2*/
/*Заголовочные файлы*/
#include <stdio.h> /*объявление библиотечных функций для ввода-вывода */
#include <conio.h> /*считывание символов с клавиатуры*/
float F (float x); /*объявление функции вычисления полинома*/
int main(void)
{
float x1,x2,y1,y2; /*описание типов переменных*/
int n, v;
FILE *infile; /*показатель на структуру типа FILE*/
printf(«nn***Программа вычисления значения функции полинома в заданной точке X***nn»);
printf(«Сколько знаков после запятой выводить на экран? «);
scanf(«%d», &n); /*считывание с клавиатуры значения точности выведения результата*/
printf(«nВвести значение Х: n 1) из файла; n 2) с клавиатуры?n»);
scanf(«%d», &v);
if (v == 1)
{
if ((infile = fopen(«input.txt», «rt»))== NULL)
{ /*открытие файла input.txt для чтения*/
fprintf(stderr, «Нельзя открыть файл.n»);
return 1;
}
fscanf (infile, «%f %f», &x1, &x2);
} /*чтение значений х1 и х2 из файла input.txt*/
else
{
printf(«Введите значение Х1n»); /*чтение значений х1 и х2 с клавiатури*/
printf(«nX1=»);
scanf(«%f», &x1);
printf(«Введите значение Х2n»);
printf(«nX2=»);
scanf(«%f», &x2);
};
y1 = F(x1); /*вызов функции F()*/
y2 = F(x2);
printf(«nЗначение полинома в точке X1=%1.3f равно: «, x1);
printf(«%.*fn», n, y1);
printf(«nЗначение полинома в точке X2=%1.3f равно: «, x2);
printf(«%.*fn», n, y2);
printf(«nНажмите любую клавишу…»);
getch(); /*считывание символа с клавиатуры*/
fclose(infile); /*закрытие файла input.txt*/
return 0; /*завершение роботы программы*/
}
float F (float x) /*определение функции вычисления полинома*/
{
return ((((x-2.22)*x+3.33)*x-4.44)*x+5.55)*x-6.66;
}
Результати виконання програми
***Программа вычисления значения функции полинома в заданной точке X***
Сколько знаков после запятой выводить на экран? 6
Ввести значение Х:
1) из файла;
2) с клавиатуры?
Значение полинома в точке X1=0.111 равно: -6.094421
Значение полинома в точке X2=-0.999 равно: -23.161737
Нажмите любую клавишу.
Блок-схема№2 до завдання№2.
![]()
![]()
![]()
![]()
![]()
![]()
![]()
![]()
Завдання №3. Скласти блок-схему та програму табулювання функції на проміжку [a, b] з заданим кроком h з використанням циклу з після умовою. Програма, крім того, повинна побудувати графік функції на вказаному проміжку з побудовою всіх точок, обчислених при табулюванні.
| № варіанту | Функція | a | b | h |
| 2 |
|
0 | 1 | 0.25 |
Відповідь №3
Текст програми.
#include <stdio.h> /*об’явлення бiблiотечних функцiй для вводу-виводу*/
#include <graphics.h> /*виводу графiки*/
#include <math.h> /*математичних обчислень*/
#include <conio.h> /*зчитування символiв з клавiатури*/
float F (float x); /*об’явлення функцii обчислення Y*/
int main() /*початок програми*/
{
float a,b,h,y,max,i; /*опис типiв змiнних*/
int g; /*помилка графiки*/
int g_driver, g_mode; /*графiчний драйвер та режим*/
int q, w,j; /*ширина та висота графiка*/
char m[5];
printf(«Програма табулювання функцii Y на промiжку [a,b] з кроком hn»);
printf(«nВведiть значення початку промiжку табуляцii: а = «);
scanf(«%f», &a);
printf(«nВведiть значення кiнця промiжку табуляцii: b = «);
scanf(«%f», &b);
printf(«nВведiть значення кроку табуляцii: h = «);
scanf(«%f», &h);
a=a+0.000000000000000001; /*вводимо значення вiдмiнне вiд нуля*/
i=a;
max=0;
do
{
y=F(i); /*табуляцiя Y*/
if (fabs(y)>max) max=fabs(y);
printf(«nx = %.3ft y = %.3f», i, y); /*виведення значень У на екран*/
i=i+h;
}
while (i <= b);
printf(«nnДля виведення графiка функцii натиснiть будь-яку клавiшу…»);
getch();
detectgraph(&g_driver, &g_mode); /*визначення графiчного адаптеру та графiчного режиму*/
initgraph(&g_driver, &g_mode, «»); /*iнiцiалiзацiя графiчноi системи*/
if ((g = graphresult()) != grOk)
printf(«nПомилка графiки : %sn», grapherrormsg(g)); /*видача повiдомлення в разi помилки вiдкриття файлу */
cleardevice(); /* очистка екрану */
q=getmaxx();
w=getmaxy(); /* визначення максимальних значень X та Y*/
setbkcolor(0); /*встановлення кольору фону — чорний*/
setcolor(15); /* встановлення поточного кольору малювання — бiлий*/
setlinestyle(0,0,2); /* встановлення стилю лiнiй: тип -суцiльна, товщина=2*/
line(0,w/2,q,w/2); /*побудова координатних вiсей*/
line(q,w/2,q-10,w/2-10);
line(q,w/2,q-10,w/2+10);
line(q/2,0,q/2,w);
line(q/2,0,q/2-10,10);
line(q/2,0,q/2+10,10);
i=a;
j=0;
settextstyle(2,0,0);
setusercharsize(1, 1, 3, 2);
do
{
y=F(i);
setcolor(15);
setlinestyle(1,0,3);
circle(j*q*h/(b-a),(w/2-y*w/(2*max)),2); /*виведення точок табуляцii*/
sprintf(m, «%.2f», i);
outtextxy(j*q*h/(b-a),w/2,m); /*значення на вiсi Х*/
setcolor(15);
setlinestyle(0,0,2);
line(j*q*h/(b-a), w/2-3,j*q*h/(b-a), w/2+3); /*розмiтка вiсi Х*/
j=j+1;
i=i+h;
}
while (i <= b);
for (i=a,j=0; i<=b;j++, i=i+(b-a)/q) /*виведення усiх точок графiку на промiжку [a,b]*/
putpixel(j,(w/2-F(i)*w/(2*max)),14);
getch(); /*зчитування символу з клавiатури*/
closegraph(); /*закриття графiчноi системи*/
return 0; /*нормальне завершення роботи програми*/
}
float F (float x) /*обчислення значення заданоi функцii в точцi X*/
{
return sin(x)/x;
}
Результати виконання програми
Програма табулювання функцii Y на промiжку [a,b] з кроком h
Введiть значення початку промiжку табуляцii: а = 0
Введiть значення кiнця промiжку табуляцii: b = 1
Введiть значення кроку табуляцii: h = 0.25
x = 0.000 y = 1.000
x = 0.250 y = 0.990
x = 0.500 y = 0.959
x = 0.750 y = 0.909
.Для виведення графіка функції натисніть будь-яку клавішу
Графік для завдання №3.

Блок-схема№3 до завдання№3.
![]()
![]()
![]()
![]()
![]()
Завдання №4. Скласти блок-схему та програму розв’язання задачі, згідно свого варіанту. Програма повинна передбачити можливість введення вхідних даних як з клавіатури, так і з файлу ZAD4.DAT. Результати роботи повинні виводитись як на екран, так і у файл ZAD4.REZ
Вхідні данні, розміщені у текстовому файлі, мають такий формат:
-
спочатку в одному рядку через пропуск йдуть два числа M та N –розмірність матриці, якщо матриця прямокутна та одне число N – якщо матриця квадратна;
-
далі у M (N для квадратної матриці) рядках через пропуск йдуть N- чисел – дані відповідних комірок матриці;
-
якщо в умові є вказівки, то у вказаному форматі можуть бути зміни.
Вхідні дані повинні мати формат, передбачений умовою задачі.
-
№ варіанту Умова задачі 2 У квадратній матриці підрахувати кількість невід’ємних елементів під головною діагоналлю.
Відповідь №4
Текст програми.
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <stdlib.h>
void main(void)
{
int A[20][20],i,j,a,y,w,x,v;
clrscr();
printf(«nЗавдання №4: Кількість невід’ємних елементів в квадратній матриціn»);
printf («n Ввести значення Х з клавіатури(1) або з файлу zad4.dat(2):»);
scanf («%d»,&a);
if (a==1)
{
printf(«n Введіть розмірність матриці:»);
scanf(«%d»,&w);
for (j=0;j<w;j++)
{
for(i=0;i<w;i++)
{
clrscr();
printf(«n Введіть[%d][%d] елемент матриці:»,j+1,i+1);
scanf(«%d»,&A[i][j]);
}
}
clrscr();
}
else
{
FILE *fp;
fp=fopen(«zad4.dat»,»r»);
if (fopen(«zad4.dat»,»r»)==NULL)
{
printf(«n Не можливо відкрити файл, бо його нема»);
goto
end;
}
else
{
fscanf(fp,»%d»,&w);
for (j=0;j<w;j++)
{
for(i=0;i<w;i++)
{
fscanf(fp,»%d»,&A[i][j]);
}
}
fclose(fp);
}
}
printf(«n Mатриця має такий вигляд:n»);
for (j=0;j<w;j++)
{
printf(«n «);
for(i=0;i<w;i++)
{
printf(«%d «,A[i][j]);
}
}
v=0;y=0;
for (j=0;j<w;j++)
{
for(i=0;i<v;i++)
{
if (A[i][j]>0)
{ y++;
}
else{;}
}v++;
if (w<v) goto ok;
}ok:
printf («n Елементів невід’ємних під головною діагоналлю:%d»,y);
FILE *fp;
fp=fopen(«zad4.res»,»w»);
fprintf(fp,»n Елементів невід’ємних під головною діагоналлю:%d»,y);
fclose(fp);
printf(«n Результат в файлі zad4.res «);
end: printf(«nНатисніть будь-яку клавішу для завершення n «);
getch();
clrscr();}
Результат виконання
Завдання №4: Кількість невід’ємних елементів в квадратній матриці
Ввести значення Х з клавіатури(1) або з файлу zad4.dat(2):2
Mатриця має такий вигляд:
3 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Елементів невід’ємних під головною діагоналлю:6
Результат в файлі zad4.res
Натисніть будь-яку клавішу для завершення
Блок-схема№4 до завдання№4.
![]()
![]()
![]()
такні
![]()
![]()
![]()
![]()
![]()
![]()
Література
-
Герберд Шилдт «Си для профессиональных программистов»
-
Ал. Стивенс «Техника програмирования на Турбо Си»
-
Шолмов Л.И. «Техника програмирования на Си»
-
Б.В. Керниган, Д.М. Ричи. «Язык Си»
-
Мюррэй Хилл, Нью Джерси Бьярн Страустрап «C++»
-
Громов, Титаренко «Программирование на Си»
-
Марченко А.Л C++. Бархатный путь
-
С.С. Гайсарян Объектно-ориентированные технологии проектирования прикладных программных систем
