
- •Луцький Національний технічний університет кафедра комп’ютерної інженерії курсовий проект (робота)
- •Завдання на курсовий проект (роботу) студенту
- •Календарний план
- •Реферат
- •Розділ і. Теоретична частина
- •1.1. Стандартний ввід і вивід
- •1.2. Форматований ввід і вивід
- •1.3. Додаткові функції
- •Розділіі. Практична частина
- •Висновок
- •Список використаних джерел
Розділіі. Практична частина
Завдання 1. Лінійні програми
Скласти лінійну програму для обрахунку:
Аргумент x=2.456вводиться з клавіатури.
Код програми:
#include <math.h>
#include <conio.h>
#include <stdio.h>
main()
{ float x,s,o,y;
const float R=4.21, g=3, a=11.6, Q=89.52,d=1;
scanf("%f",&x);
o=x*g+a;
y=pow(6+a,1/3);
s=pow((d*d+log(y)-R*Q)*o/R,0.5);
printf("\n s=%f ", s);
getch();
return 0;}
Результат:
Блок схема:
Завдання 2. Програми з розгалуженням
Скласти програму з розгалуженням для обрахунку:
a=1.62, b=-1.25
Значення аргументут x вводиться з клавіатури, або 1.62, або 1.41.
Код програми:
#include <math.h>
#include <conio.h>
#include <stdio.h>
#define A 1.62
//#define B -1.25
main()
{ float x,y;
scanf("%f",&x);
if (x==A)
{
y=exp(abs(x+A))*sin(x);
printf("\n y=%f x=%f\n",y,x);
}
else if(x>A&&x<pow(A,2))
{
y=pow(((x-A)*cos(x)),2);
printf("\n y=%f x=%f \n",y,x);
}
else printf("Vvedene chuslo za mezhamu");
getch();
return 0;}
Результат:
Блок схема:
Завдання 3. Циклічні програми з регулярною змінною аргументу
Скласти циклічну програму з регулярною змінною:
a=21.4, b=1.95
Початкове значення аргументу x 4.6, крок 1.5, кількість кроків 8.
Код програми:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define a 21.4
#define b 1.95
#define pi 3.14
main()
{
float x,t;
for(x=4.6;x<16.6;x+=1.5)
{
t=(pi-pow(x,2))*sin(sqrt(2.1*b+x*log(x)));
printf("t=%f x=%f \n",t,x);
}
getch();
return 0;
}
Результат:
Блок схема:
Завдання 4-1.Циклічні програми з регулярною змінною аргументу, які містять розгалуження
Визначити найбільший спільний дільник (НСД) трьох введених з клавіатури цілих чисел або вивести повідомлення про його відсутність, якщо такий дільник дорівнює 1. Підказка: пошук НСД вести, починаючи від найменшого з введених чисел.
Код програми:
#include <stdio.h>
#include <conio.h>
int gcd(int i, int j)
{
while(i&&j)
{
if(i<j)
j%=i;
else
i%=j;
}
return i|j;
}
main()
{
int a,b,c,D;
printf("Enter a,b,c\n");
scanf("%d%d%d",&a,&b,&c);
D=gcd(c,(gcd(a,b)));
if(D!=1)
printf("Najbilshuj spilnuj dilnuk =%d\n",D);
else printf("Nemae najbilshogo spilnogo dilnuka!!!");
getch();
return 0;
}
Результат:
Блок схема:
Завдання 4-2.Циклічні програми з регулярною змінною аргументу, які містять розгалуження
Обчислити
значення функції
у набуває значення від 0 до 8 з кроком 0.15.
Код програми:
#include <math.h>
#include <conio.h>
#include <stdio.h>
main()
{ float x,y,p; x=4.6;
for(y=0;y<=8;y=y+0.15)
{
if (y<0.6)
{x=y*y+y+1;
p=pow(x+exp(x-2),0.5) ;
printf("p=%f y=%f \n",p,y); }
else if (y>=1)
{x=y-1;
p=pow(x+exp(x-2),0.5) ;
printf("p=%f y=%f \n",p,y); }
else printf("non difine p y=%f \n",y); }
getch();
return 0;}
Результат:
Блок схема:
Завдання 5-1. Одновимірні масиви
З клавіатури ввести масив дійсних чисел (максимальна розмірність – 30 елементів). Циклічно зсунути його елементи на одну позицію ліворуч. Надрукувати отриманий масив. Підказка: циклічне зсування означає, що перший елемент масиву переходить на місце зсунутого останнього.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{ int i,j,kk,k,max,flag,n,R;
const int M=30;
int nat[M];
scanf("%d\n",&n);
for(i=0;i<n;i++)
{
scanf("%d\n",&nat[i]);
}
kk=nat[0];
for(i=0;i<(n-1);i++)
{
nat[i]=nat[i+1];
}
nat[n-1]=kk;
for(i=0;i<n;i++)
{
printf("\n nat%d=%d",i,nat[i]);
}
getch();
return 0;}
Результат:
Блок схема:
Завдання 5-2.Одновимірні масиви
Дано одновимірний масив Х, який складається з 12 елементів, обчислити
Результат обчислення вивести і вигляді масиву у.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <math.h>
main()
{
float i,x[12],y[12];
for(int k=0;k<12;k++)
{
scanf("%f\n",&x[k]);
if((abs(x[k]))<0.1)
y[k]=x[k]-(1/3)*x[k]*x[k]*x[k];
else
y[k]=cos(3.14/2-x[k]);
}
for(int k=0;k<12;k++)
printf("y[%d]=%f \n",k+1,y[k]);
getch();
return 0;}
Результат:
Блок схема:
Завдання 6.Використання вказівників для роботи з масивами даних
З клавіатури ввести довге беззнакове ціле число. Утворити масив з цифр цього числа. Потім сформувати і надрукувати нове число з інверсним (зворотним) порядком цифр.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
main()
{
int A[25];
int i,b,a ;
cin>>a;
b=0;
while (a>0)
{
A[b]=a%10;
a/=10;
b++;
}
for(i=0;i<b;i++)
a=a*10+A[i];
printf("\n a=%d",a);
getch();
return 0;
}
Результат:
Блок схема:
Завдання 7.Циклічні програми з накопиченням суми або добутку
Обчислити значення функції
Аргумент х змінюється від початкового значення 1.3 до кінцевого значення -14.3. Кількість значень аргументу n=9; a=1.32.Код програми:
#include<stdio.h>
#include <math.h>
#include <conio.h>
#define n 9
#define a 1.32
main()
{
float y,x,b,S,dx;
dx=13/9;
y=0;
for(x=1.3;x<=14.3;x+=dx)
y+=(pow(a+x,2))/(1+pow(cos(x),2));
printf("\n suma S=%f\n",y);
getch();
return 0;
}
Результат:
Блок схема:
Завдання 8.Вкладені цикли
Скласти программу використовуючи вкладені цикли.
Позначення індкса: i
Номери індекса:1, 2, 3
Значення індексної змінної:1.95, 0.87, 1.29
Функція:
Параметр циклу с, початкове значення 0.26, кінцеве 1.26, крок 0.2
Код програми:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define p 4.86
main()
{
float b,c;
float a[3]={1.95,0.87,1.29};
for(int i=0;i<3;i++)
{
printf("\n a=%f\n",a[i]);
for(c=0.26;c<1.26;c+=0.2)
{
b=(a[i]*(p+1))/(p*sin(c));
printf(" b=%f c=%f\n",b,c);
}
}
getch();
return 0;
}
Результат:
Блок схема:
Завдання 9.Двовимірні масиви, сортування масивів
Дано матрицю А розміром 4х5. Визначити кількість елементів в кожному рядку матриці А, модуль яких дорівнює порядковому номеру елемента в рядку. На друк вивести кількість таких елементів для кожного рядка.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
main()
{
int i,j,n,k;
int a[4][5]={{1, 0, 0, 0,0},
{1, 2, -1, 22,3},
{1, 2, -1, -2,3},
{1, -3, -1, -4,5}};
for(i=0;i<4;i++)
{
k=0;
for(j=0;j<5;j++)
if (abs(a[i][j])==j+1)
k++;
printf("Kilkist y riadky=%d\n",k);
}
getch();
return 0;
}
Результат:
Блок схема:
Завдання 10.Процедури-функції
Дано квадратну матрицю А розміром nxn. Скласти програму нормування матриці, поділивши всі елементи кожного рядка на максимальний елемент за модулем цього рядка. Пошук максимального елемента рядка оформити у вигляді процедури.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define n 4
float norm(float x,float y);
main()
{
int i,j;
float max[n],A[n][n]={{4,-5,6,2},
{2,-2,3,4},
{-9,7,1,7},
{5,-5,-5,5}};
for(i=0;i<n;i++)
{
printf("\n");
max[i]=fabs(A[i][0]);
for(j=0;j<n;j++)
{
max[i]=norm(max[i],A[i][j]);
printf(" %f ",A[i][j]);
}
}
printf("\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
{
A[i][j]= A[i][j] / max[i];
printf(" %f ",A[i][j]);
}
}
getch();
return 0;
}
float norm(float x,float y)
{
if(x<fabs(y))
x=fabs(y);
return x;
}
Результат:
Блок
схема:
Завдання 11.Підпрограми-функції
Скласти процедуру-функцію, яка обчислює значення х аргументу монотонної функції, при якому f(х)=0, згідно формули:
Очевидно:
Код програми:
#include <conio.h>
#include <stdio.h>
#include <math.h>
float argyment(float x,float a, float b, int i);
main()
{
int i;
float a,b,X;
printf(" Vveditj a ta b \n");
scanf("%f%f",&a,&b);
X=(b-a)/2;
for(i=2;i<5;i++)
{
X=argyment(X,a,b,i);
printf(" X=%f\n",X);
}
getch();
return 0;
}
float argyment(float x,float a, float b, int i)
{
float n,sign;
if(x>0) sign=1;
else if(x==0) sign=0;
else if(x<0) sign=-1;
x=x-sign*((b-a)/pow(2,i));
return x;
}
Результат:
Блок схема:
Завдання 12-1.Опрацювання символьних рядків
Перевірити, чи введений з клавіатури символьний рядок є правильним записом беззнакового цілого числа у системі числення з основою 5 (з можливими символами пропуску перед числом і після нього). Якщо так, то визначити і надрукувати десяткове значення цього числа.
Кодпрограми:
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <string.h>
main()
{
clrscr();
int n1,n2,i,x=0,k,m1,m2;
char text[150], text2[150], slovo2[40], prslovo[40];
gets(text);
k=strlen(text);
for(i=0;i<k;i++)
if(text[i] == ' ')
{
x++;
if(x==1)n1=i;
if(x==2)n2=i;
}
for(i=n1+1;i<n2;i++)
slovo2[i-(n1+1)]=text[i];
x=0;
for(i=k;i>0;i--)
if(text[i] == ' ')
{
x++;
if(x==1)m2=i;
if(x==2)m1=i;
}
int c=(m2-m1)-(n2-n1);
for(i=m1+1;i<=m2;i++)
prslovo[i-(m1+1)]=text[i];
for(i=0;i<=n1;i++) //До першого пропуску
text2[i]=text[i];
for(i=n1+1;i<n1+(m2-m1);i++) //Вставка перед останнбого слова замість другого
text2[i]=prslovo[i-(n1+1)];
for(i=n1+(m2-m1);i<=m1+c;i++) //Після другого слова
text2[i]=text[i-c];
for(i=m1+c+1;i<m2;i++) //Вставка другого замість перед останнього
text2[i]=slovo2[i-(m1+c+1)];
for(i=m2;i<k;i++) //Вставка останнього слова
text2[i]=text[i];
for(i=0;i<k;i++) //Вивід перробленого речення
printf("%c",text2[i]);
getch();
return 0;}
Результат:
Блок схема:
Завдання 12-2.Опрацювання символьних рядків
В заданому тексті знайти і вивести на друк цифри, які містяться в ньому, і їх кількість.
Кодпрограми:
#include <stdio.h>
#include <stdio.h>
#include <conio.h>
main()
{ char *pStr;
char str[80];
int isNumber = 0,k=0;
gets(str);
pStr = str;
while (*pStr) {
if (*pStr >= '0' && *pStr <= '9') {
isNumber = 1;
k++;
printf("%c", *pStr);
} else {
if (isNumber) {
isNumber = 0;
printf(" ");
} }
pStr++;
}
printf("\nKilkistb cufr y danomy rechenni=%d",k);
getch();
return 0;}
Результат:
Блок схема:
Завдання 13. Застосування бібліотечних функцій для роботи з символами та символьними рядками
З клавіатури ввести речення. Визначити, чи входить до його складу задане слово (регістри літер не враховувати). Якщо так, то надрукувати номер цього слова в реченні, інакше вивести відповідне повідомлення.
Код програми:
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
int main()
{
char line[1024], *word[100], slovo[100];
int n=0,k=1,m=0;
cout<<"Enter rechennia: ";
gets(line);
cout<<"\nEnter slovo: ";
gets(slovo);
word[n] = strtok(line," ");
while(word[n])
{
if(!strcmp(word[n],slovo))
{
cout<<"Nomer zadanogo slova: "<<k;
m++;
}
word[++n] = strtok(NULL," ");
k++;
}
if(m==0) cout<<"Zadanogo slova nemae y rechenni!!!";
getch();
return 0;
}
Результат:
Блок схема:
Завдання 14. Багатовимірні масиви та масиви символьних рядків
Ввести послідовність символьних рядків, у кожному з яких записано прізвище, ім’я та по-батькові одного студента. Визначити і запам’ятати стать кожного. Потім скоротити рядки, залишивши тільки прізвище та ініціали. Надрукувати скорочений список, вказавши в дужках стать кожного студента.
Код програми:
#include <stdio.h>
#include <conio.h>
#include <iostream.h>
void FFF(char M[]);
main()
{
char A[100],B[100],C[100];
cout<<"Vvedu PIB persogo stydenta:";
gets(A);
cout<<"Vvedu PIB drygogo stydenta:";
gets(B);
cout<<"Vvedu PIB tretiogo stydenta:";
gets(C);
cout<<"Skorochenuj spusok stydentiv: \n";
FFF(A);
FFF(B);
FFF(C);
getch();
return 0;
}
void FFF(char M[])
{
int i,k,n=0,n1,n2;
char im[20], *st;
k=strlen(M);
for(i=0;i<k;i++)
if(M[i]==' ')
{
n++;
if(n==1)n1=i+1;
if(n==2)n2=i;
}
for(i=n1;i<n2;i++)
im[i-n1]=M[i];
im[i-n1]='\0';
if(im[i-n1-1]=='a')st="zh"; else st="ch";
for(i=0;i<=n1;i++)
{
cout<<M[i];
if(i==n1) cout<<".";
}
cout<<M[n2+1]<<"."<<"("<<st<<")\n";
}
Результат:
Блок схема:
Завдання 15. Файли
Сформувати файл А, що містить інформацію про кінострічки:
- назва фільму;
- рік випуску;
- кіностудія;
- режисер.
З файлу А вибрати і переписати у файл В інформацію про кінострічки, зняті кіностудією ім. Довженка у 198592 рр.
Код програми:
#include <conio.h>
#include <stdio.h>
#include <fstream.h>
struct kino
{
char name[50], studia[50], rejiser[50];
int rik;
};
main()
{
int i;
kino A[3];
ofstream fileo("A.txt");
for (int i = 0; i < 3; i++)
{
cout << "nazva filmu: ";
cin >> A[i].name;
cout << "rik: ";
cin >> A[i].rik;
cout << "studia: ";
cin >> A[i].studia;
cout << "rejiser: ";
cin >> A[i].rejiser;
fileo << A[i].name << "\t"
<< A[i].rik << "\t"
<< A[i].studia << "\t"
<< A[i].rejiser << "\n";
}
ifstream filei("A.txt");
ofstream fielTwo("B.txt");
for (int i = 0; i < 3; i++)
{
if (A[i].rik>1985&&A[i].rik<1992&&(!strcmp(A[i].studia,"Dovzhenka")))
{
fielTwo << A[i].name << "\t"
<< A[i].rik << "\t"
<< A[i].studia << "\t"
<< A[i].rejiser << "\n";
}
}
getch();
return 0;
}
Результат:
Блок схема:
Завдання 16. Основи опрацювання структур
З клавіатури ввести послідовність адрес, кожна з яких задається структурою з полями: <Індекс>, <Місто>, <Вулиця>, <Будинок>. Відсортувати ведені дані за порядком зростання індексів та роздрукувати їх у формі таблиці. Визначити відсоток львівських адрес.
Код програми:
#include <conio.h>
#include <iostream.h>
#include <stdio.h>
#define n 3
struct adresa
{
char misto[30], vulycia[30];
int index, budynok;
};
main()
{
adresa A[n],k;
int i,j;
float m=0,V=0;
for(i=0;i<3;i++)
{
cout<<"\n Vveditj misto:";
cin>>A[i].misto;
cout<<"Vulycu:";
cin>>A[i].vulycia;
cout<<"Index:";
cin>>A[i].index;
cout<<"Budynok:";
cin>>A[i].budynok;
}
for(i=0;i<3;i++)
for(j=i+1;j<3;j++)
if(A[i].index>A[j].index)
{
k=A[i];
A[i]=A[j];
A[j]=k;
}
cout<<"Index:\tMisto:\tVulycia: Budynok:\n";
for(i=0;i<3;i++)
{
if(!strcmp(A[i].misto,"Lviv"))
m++;
cout<<A[i].index<<"\t"<<A[i].misto
<<"\t"<<A[i].vulycia<<"\t"<<A[i].budynok<<"\n";
}
if(m!=0)V=(m/n)*100;
cout<<"Vidsotok lvivskih adres: "<<V<<"%";
getch();
return 0;
}
Результат:
Блок схема:
Завдання 17. Основи ООП. Принципи побудови класів
Створити клас з такими полями та методами:
СТУДЕНТ
поля:
ім'я – char*
курс – int
стать - int(bool)
методи:
зміна курсу
введення імені
введення статі
виведення інформації про об’єкт
Код програми:
#include <iostream.h>
#include <conio.h>
#include <string.h>
class Stydent
{
char name[25];
int k,st;
public:
Stydent();
Stydent(char*, int, int);
Stydent(const Stydent&);
void SetName(char*);
void SetStatj(int);
void ZminaKyrsy(int);
void Show();
};
Stydent::Stydent()
{
strcpy(name, "---");
k=0;
st=0;
}
Stydent::Stydent(char* a, int b, int c)
{
strcpy(name, a);
k=b;
st=c;
}
Stydent::Stydent(const Stydent& X)
{
strcpy(name, X.name);
k=X.k;
st=X.st;
}
void Stydent::SetName(char* a)
{
strcpy(name, a);
}
void Stydent::SetStatj(int a)
{
st=a;
}
void Stydent::ZminaKyrsy(int a)
{
k=a;
}
void Stydent::Show()
{
cout << "\nInformacia pro stydenta:";
cout << "\nName: " << name;
cout << "\nKyrs: " << k;
cout << "\nStatj: " << st;
}
void main()
{
Stydent T1;
Stydent T2("Makarchenko",1,1);
cout << "Show 1:";
T1.Show();
cout << "\n\nShow 2:";
T2.Show();
T1.SetName("Adrienko");
cout << "\n\nShow 1:";
T1.Show();
T1.SetStatj(1);
T1.ZminaKyrsy(2);
cout << "\n\nShow 1:";
T1.Show();
Stydent T3;
cout << "\n\nShow 3:";
T3.Show();
T3 = T1;
cout << "\n\nShow 3:";
T3.Show();
getch();
}
Результат:
Блок схема:
Завдання 18. Перевантаження функцій
Написати функцію min, яка шукає мінімум серед двох, трьох та чотирьох цілих та дійсних чисел.
Код програми:
#include<iostream.h>
#include<conio.h>
#include<math.h>
int min(int,int);
float min(float,float);
int min(int,int,int);
float min(float,float,float);
int min(int,int,int,int);
float min(float,float,float,float);
main()
{
int a = 0, b = 0, c = 0, d=0;
float a1 = 0, b1 = 0, c1 = 0,d1=0;
cout << "Vvedu 4 cili chisla: \n";
cin >> a >> b >> c>>d;
cout <<"Minimaljne sered ciluh chusel ="<<min(a,b,c,d);
cout << "\nVvedu 4 diisni chisla: \n";
cin >> a1 >> b1 >> c1>>d1;
cout <<"Minimaljne sered dijsnuh chusel ="<<min(a1,b1,c1,d1);
getch();
return 0;
}
int min(int d1,int d2)
{
int m=d1;
if(m>d2) m=d2;
return m;
}
float min(float d1,float d2)
{
float m=d1;
if(m>d2) m=d2;
return m;
}
int min(int d1,int d2,int d3)
{
int m=d1;
if(m>d2) m=d2;
if(m>d3) m=d3;
return m;
}
float min(float d1,float d2,float d3)
{
float m=d1;
if(m>d2) m=d2;
if(m>d3) m=d3;
return m;
}
int min(int d1,int d2,int d3,int d4)
{
int m=d1;
if(m>d2) m=d2;
if(m>d3) m=d3;
if(m>d4) m=d4;
return m;
}
float min(float d1,float d2,float d3,float d4)
{
float m=d1;
if(m>d2) m=d2;
if(m>d3) m=d3;
if(m>d4) m=d4;
return m;
}
Результат:
Блок схема:
Завдання 19. Шаблони функцій
Написати функцію perum, яка шукає периметр трикутника, чотирикутника та п’ятикутника, передбачити задання сторін за допомогою цілих та дійсних чисел.
Код програми:
#include<iostream.h>
#include<conio.h>
#include<math.h>
template <class MyType>
MyType perum(MyType,MyType,MyType);
template <class MyType>
MyType perum(MyType,MyType,MyType,MyType);
template <class MyType>
MyType perum(MyType,MyType,MyType,MyType,MyType);
main()
{
int a = 0, b = 0, c = 0, d=0;
float a1 = 0, b1 = 0, c1 = 0,d1=0;
cout << "Vvedu storonu bagatokytnuka: \n";
cin >> a >> b >> c>>d;
cout <<"Perumetr bagatokytnuka ="<<perum(a,b,c,d);
cout << "\nVvedu storonu bagatokytnuka: \n";
cin >> a1 >> b1 >> c1>>d1;
cout <<"Perumetr bagatokytnuka ="<<perum(a1,b1,c1,d1);
getch();
return 0;
}
template <class MyType>
MyType perum(MyType d1,MyType d2,MyType d3)
{
MyType p;
p=d1+d2+d3;
return p;
}
template <class MyType>
MyType perum(MyType d1,MyType d2,MyType d3,MyType d4)
{
MyType p;
p=d1+d2+d3+d4;
return p;
}
template <class MyType>
MyType perum(MyType d1,MyType d2,MyType d3,MyType d4,MyType d5)
{
MyType p;
p=d1+d2+d3+d4+d5;
return p;
}
Результат:
Блок схема: