DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Програмного забезпечення (ПЗ)

Інформація про роботу

Рік:
2015
Тип роботи:
Курсова робота
Предмет:
Проблемно-орієнтовані мови програмування
Група:
КН-1
Варіант:
6

Частина тексту файла (без зображень, графіків і формул):

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра ПЗ КУРСОВА РОБОТА з курсу «Проблемно-орієнтовані мови програмування» Варіант 6 Виконав: студент групи КН-1 Прийняв: Львів 2007 Завдання 1. Сформувати з елементів даної матриці, що лежать під головною діагоналлю, кососиметричну матрицю (матриця А кососиметрична, якщо aij=aji для довільних i,j). 2. Обчислити суми елементів рядків, номери яких задаються цілочисельним вектором. 3. З множини М точок на площині, заданих декартовими координатами на площині, сформувати підмножину P≤M, що містить точки, які знаходяться всередині замкненої області D. Область D обмежена лініями (K – змінний коефіцієнт): 4. З множини прямих М, заданих коефіцієнтами рівняння Ax+By+C=0, сформувати множину прямих P≤M, відстань від яких до точки A(xa; ya) не належить заданому інтервалу, і впорядкувати цю множину в порядку зростання відстаней. 5. З множини М точок на площині, сформувати множину точок P≤M, відстань від яких до прямої Ax+By+C=0 належить заданому інтервалу, і впорядкувати цю множину за спаданням відстаней. 6. З множини прямих М, заданих коефіцієнтами рівняння, визначити дві паралельні прямі, між якими найбільша відстань. 7. Визначити довжини ламаних ліній, які починаються в точці A(xa; ya), проходять через одну з точок множини M {(x1; y1), (x2; y2), (x3; y3), ... ,(xn; yn)}. Сформувати множину точок P≤M, що належить ламаним, довжина яких найбільша. Впорядкувати цю множину в порядку спадання довжин ламаних. 8. Обчислити методом прямокутників інтеграл  EMBED Equation.3 , a = 0,0; b = 2,0 ... 3,0 9. Обчислити методом січних наближений корінь рівняння:  EMBED Equation.3 , αпоч.=0,5; αкінц.=1,5; Δα=0,1; a0=0,1; b0=1,8 Текст програми Модуль KURS.CPP #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <math.h> #include "task46.h" #include "task79.h" int SelectTask(); void Task1(); void Task2(); void Task3(); void main() { int nTask; do { nTask=SelectTask(); // Вибiр номера завдання користувачем switch(nTask) { case 1: Task1(); break; // 1 - викликаємо функцiю для завд.1 case 2: Task2(); break; // 2 - викликаємо функцiю для завд.2 case 3: Task3(); break; // ... case 4: Task4(); break; case 5: Task5(); break; case 6: Task6(); break; case 7: Task7(); break; case 8: Task8(); break; case 9: Task9(); break; // 9 - викликаємо функцiю для завд.9 } } while (nTask); // Якщо 0 - завершуємо роботу програми } int SelectTask() { int task=0; clrscr(); printf("Nomer zavdannya (1-9, 0-zavershyty): "); // Читаємо номер завдання з клавiатури... scanf("%d",&task); // ...i повертаємо його як результат роботи функцiї return task; } void Task1() { int i,j, n, rezhym, a[50][50], b[50][50]; FILE *f; clrscr(); printf("Rezhym roboty programy [0-zvychajnyj, 1-demonstracijnyj]: "); // Задаємо режим роботи програми scanf("%d",&rezhym); printf("\n"); if (rezhym!=1) // Якщо "Звичайний" - читаємо данi з клавiатури { printf ("Poryadok matryci: "); scanf("%d",&n); printf ("Vvedit elementy matryci (po ryadkah)\n"); for (i=0; i<n; i++) for (j=0; j<n; j++) scanf("%d",&a[i][j]); } else // iнакше - читаємо данi з файлу i виводимо їх на екран { f=fopen("z1demo.dat","rt"); printf("Poryadok matryci: "); fscanf(f,"%d",&n); printf("%d\n",n); printf ("Vvedit elementy matryci (po ryadkah)\n"); for (i=0; i<n; i++) { for (j=0; j<n; j++) { fscanf(f,"%d",&a[i][j]); printf("%d ",a[i][j]); } printf("\n"); } fclose(f); } // Формуємо кососиметричну матрицю for (i=0; i<n; i++) { for (j=0; j<n; j++) if (i<j) b[i][j]=-a[j][i]; else b[i][j]=a[i][j]; } // Виводимо результати printf("\nKososymetry4na matrycya:\n"); for (i=0; i<n; i++) { for (j=0; j<n; j++) printf("%d ",b[i][j]); printf("\n"); } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task2() { int i,j, n,m, rezhym, s, **b, *v, l; FILE *f; clrscr(); printf("Rezhym roboty programy [0-zvychajnyj, 1-demonstracijnyj]: "); // Задаємо режим роботи програми scanf("%d",&rezhym); printf("\n"); // Видiляємо пам'ять пiд двовимiрний масив b=(int**)calloc(50,sizeof(int*)); // Видiляємо пам'ять пiд рядки for (i=0; i<50; i++) b[i]=(int*)calloc(50,sizeof(int)); // Видiляємо пам'ять пiд стовпцi кожного рядка // Видiляємо пам'ять пiд вектор v v=(int*)calloc(50,sizeof(int)); if (rezhym!=1) // Якщо "Звичайний" - читаємо данi з клавiатури { printf ("Kilkist ryadkiv (M): "); scanf("%d",&m); printf ("Kilkist stovpciv (N): "); scanf("%d",&n); printf ("Vvedit elementy matryci (po ryadkah)\n"); for (i=0; i<m; i++) for (j=0; j<n; j++) scanf("%d",*(b+i)+j); printf ("\nVvedit vektor z %d elementiv: ",m); for (i=0; i<m; i++) scanf("%d",v+i); } else // iнакше - читаємо данi з клавiатури i виводимо їх на екран { f=fopen("z2demo.dat","rt"); printf ("Kilkist ryadkiv (M): "); fscanf(f,"%d",&m); printf("%d\n",m); printf ("Kilkist stovpciv (N): "); fscanf(f,"%d",&n); printf("%d\n",n); printf ("Vvedit elementy matryci (po ryadkah)\n"); for (i=0; i<m; i++) { for (j=0; j<n; j++) { fscanf(f,"%d",*(b+i)+j); printf("%d ",*(*(b+i)+j)); } printf("\n"); } printf ("\nVvedit vektor z %d elementiv: ",m); for (i=0; i<m; i++) { fscanf(f,"%d",v+i); printf("%d ",*(v+i)); } printf("\n"); fclose(f); } printf("\n"); for (i=0; i<m; i++) { // Обчислюємо суму елементiв рядка, номер якого задається // вiдповiдним елементом вектора v s=0; for (j=0; j<n; j++) s=s+*(*(b+*(v+i)-1)+j); // Виводимо суму printf ("Suma elementiv ryadka %d: %d\n",*(v+i),s); } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task3() { int i,n; float m[50][2], k, y1,y2,y3; clrscr(); // Вводимо данi (кiлькiсть точок множини та їх координати) printf("Kilkist elementiv mnozhyny M: "); scanf("%d",&n); printf("Vvedit %d par koordynat [X Y]\n",n); for (i=0; i<n; i++) { scanf("%f %f",&m[i][0],&m[i][1]); } // Виконуємо для кожного значення К окремi обчислення... for (k=1.0; k<=2.2; k+=0.4) { printf("\n"); printf("K=%.1f: ",k); for (i=0; i<n; i++) { y1=k*cos(m[i][0]+0.25); y2=log(0.25-m[i][0]); y3=m[i][0]*m[i][0]*fabs(0.25-m[i][1])*1.21-1; // Якщо точка лежить в областi D - виводимо її координати if ((m[i][1]<=y1) && (m[i][1]>=y2) && (y3>=0)) printf("(%.3f;%.3f),",m[i][0],m[i][1]); } } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } Модуль TASK46.CPP #include <stdio.h> #include <conio.h> #include <math.h> #include "task46.h" // Вiдстань вiд точки до прямої float Vidstan1(TPryama p, float x, float y) { return (fabs((p.A*x + p.B*y + p.C)/sqrt(p.A*p.A + p.B*p.B))); } // Вiдстань мiж двома точками float Vidstan2(float x1, float y1, float x2, float y2) { return (sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))); } void Task4() { int i,n, b; TPryama m[50], tmp; float xa,ya, d1,d2; clrscr(); // Вводимо данi (кiлькiсть прямих множини М та їх коефiцiєнти) printf("Kilkist elementiv mnozhyny M: "); scanf("%d",&n); printf("Vvedit koeficienty %d pryamyh [A B C]\n",n); for (i=0; i<n; i++) scanf("%f %f %f",&m[i].A,&m[i].B,&m[i].C); // Читаємо координати точки А та значення вiдстаней d1,d2 printf("xA="); scanf("%f",&xa); printf("yA="); scanf("%f",&ya); printf("d1="); scanf("%f",&d1); printf("d2="); scanf("%f",&d2); printf("\n"); // Впорядковуємо множину М за зростанням вiдстаней до точки А do { b=0; for (i=0; i<n-1; i++) { if (Vidstan1(m[i],xa,ya)>Vidstan1(m[i+1],xa,ya)) { tmp=m[i]; m[i]=m[i+1]; m[i+1]=tmp; b=1; } } } while (b); for (i=0; i<n; i++) { // Якщо вiдстань не лежить в iнтервалi [d1;d2] - виводимо рiвняння прямої if (!((Vidstan1(m[i],xa,ya)>=d1) && (Vidstan1(m[i],xa,ya)<=d2))) printf("%.2fx + %.2fy + %.2f = 0, d=%.3f\n",m[i].A,m[i].B,m[i].C,Vidstan1(m[i],xa,ya)); } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task5() { int i,n, b; TTochka m[50], tmp; TPryama p1; float d1,d2; clrscr(); // Вводимо данi (кiлькiсть точок множини М та їх координати) printf("Kilkist elementiv mnozhyny M: "); scanf("%d",&n); printf("Vvedit %d par koordynat [X Y]\n",n); for (i=0; i<n; i++) scanf("%f %f",&m[i].x,&m[i].y); // Читаємо коефiцiєнти прямої p1 та значення вiдстаней d1,d2 printf("A="); scanf("%f",&p1.A); printf("B="); scanf("%f",&p1.B); printf("C="); scanf("%f",&p1.C); printf("d1="); scanf("%f",&d1); printf("d2="); scanf("%f",&d2); printf("\n"); // Впорядковуємо множину М за спаданням вiдстаней до прямої p1 do { b=0; for (i=0; i<n-1; i++) if (Vidstan1(p1,m[i].x,m[i].y)<Vidstan1(p1,m[i+1].x,m[i+1].y)) { tmp=m[i]; m[i]=m[i+1]; m[i+1]=tmp; b=1; } } while (b); for (i=0; i<n; i++) { // Якщо вiдстань лежить в iнтервалi [d1;d2] - виводимо рiвняння прямої if ((Vidstan1(p1,m[i].x,m[i].y)>=d1) && (Vidstan1(p1,m[i].x,m[i].y)<=d2)) printf("(%.2f;%.2f), d=%.3f\n",m[i].x,m[i].y,Vidstan1(p1,m[i].x,m[i].y)); } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task6() { int i,j,n,p1,p2; TPryama m[50]; float d0; clrscr(); // Вводимо данi (кiлькiсть прямих множини М та їх коефiцiєнти) printf("Kilkist elementiv mnozhyny M: "); scanf("%d",&n); printf("Vvedit koeficienty %d pryamyh [A B C]\n",n); for (i=0; i<n; i++) scanf("%f %f %f",&m[i].A,&m[i].B,&m[i].C); printf("\n"); d0=0; p1=1; p2=1; // Перебираємо всi можливi пари прямих for (i=0; i<n; i++) for (j=i+1; j<n; j++) { // Якщо прямi паралельнi i вiдстань мiж ними бiльша за максимальну... if ((((m[i].A/m[i].B)==(m[j].A/m[j].B)) && (Vidstan1(m[i],0,-m[j].C/m[j].A)>d0))) { // ... то приймаємо за максимум вiдстань мiж ними p1=i; p2=j; d0=Vidstan1(m[i],0,-m[j].C/m[j].A); } } // Виводимо результати - рiвняння паралельних прямих з максимальною вiдстанню printf("%.2fx + %.2fy + %.2f = 0\n",m[p1].A,m[p1].B,m[p1].C); printf("%.2fx + %.2fy + %.2f = 0\n",m[p2].A,m[p2].B,m[p2].C); printf("d=%.3f\n",d0); printf("\n"); printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } Модуль TASK79.CPP #include <stdio.h> #include <conio.h> #include <math.h> #include "task46.h" #include "task79.h" // Пiдiнтегральна функцiя для завдання 8 float f8(float x) { return (1/sqrt(2*pow(x,4)+1.7)); } // Функцiя для завдання 9 float f9(float _alpha,float _x) { return (_alpha*log(_x)-1/_x); } // Iнтегрування методом прямокутникiв // (параметри - крайнi точки iнтервалу (a,b) та кiлькiсть елементарних вiдрiзкiв nj) float IntPryam(float a, float b, int nj) { int i=0; float fSum=0, h,xi; h=(b-a)/nj; // Обчислюємо крок h for (i=1; i<nj; i++) { xi=a+i*h; fSum+=f8(xi); } fSum=(h/2)*(f8(a)+f8(b)+2*fSum); // Повертаємо наближене значення визначеного iнтеграла return fSum; } void Task7() { int i,n, b; TTochka m[50], tmp; float xa,ya, xb,yb, d,d0; clrscr(); printf("Kilkist elementiv mnozhyny M: "); scanf("%d",&n); printf("Vvedit %d par koordynat [X Y]\n",n); // Вводимо елементи множини М for (i=0; i<n; i++) scanf("%f %f",&m[i].x,&m[i].y); // Вводимо координати точок А i В та значення вiдстанi d0 printf("xA="); scanf("%f",&xa); printf("yA="); scanf("%f",&ya); printf("xB="); scanf("%f",&xb); printf("yB="); scanf("%f",&yb); printf("\n"); // Впорядковуємо множину М за спаданням довжин ламаних do { b=0; for (i=0; i<n-1; i++) { d=Vidstan2(xa,ya,m[i].x,m[i].y)+Vidstan2(xb,yb,m[i].x,m[i].y); if (d<Vidstan2(xa,ya,m[i+1].x,m[i+1].y)+Vidstan2(xb,yb,m[i+1].x,m[i+1].y)) { tmp=m[i]; m[i]=m[i+1]; m[i+1]=tmp; b=1; } } } while (b); for (i=0; i<n; i++) { d=Vidstan2(xa,ya,m[i].x,m[i].y)+Vidstan2(xb,yb,m[i].x,m[i].y); printf("Cherez tochku (%.2f;%.2f): %.3f\n",m[i].x,m[i].y,d); } printf("\n"); printf("<Enter> - vyhid\n"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task8() { int n, nmax; float a=0.0, b, r1,r2, di; float EPS=1e-4; clrscr(); printf("Maksymalna kilkist elementarnyh vidrizkiv (jmax): "); scanf("%d",&nmax); printf("Tochist (napr., 0.001): "); scanf("%f",&EPS); // Виконуємо обчислення для бiжучого значення b вiд 2.0 до 3.0 for (b=2.0; b<=3.01; b=b+0.2) { n=2; do { // Обчислюємо iнтеграл для кiлькостi вiдрiзкiв nj i 2nj di=fabs((r1=IntPryam(a,b,n*2))-(r2=IntPryam(a,b,n))); n=n*2; } // Якщо кiлькiсть вiдрiзкiв бiльша за максимальну, // або досягнута необхiдна точнiсть - завершуємо обчислення iнтеграла while (!((n>nmax) || (di<EPS))); // Виводимо результати printf("b=%.2f\tInj=%f\tnj=%d\te=%f\t",b,fabs(r1),n,di); if (n>nmax) printf("Umova vyhody: j>jmax\n"); else printf("Umova vyhody: |Inj-I(nj-1)|<e\n"); } printf("\n"); printf("<Enter> - vyhid"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } void Task9() { const float alpha0=1.5, alpha1=2.5, dalpha=0.1; int n=0, N; float a0=1.1, b0=1.7, alpha; float x2,x1,x, hn, EPS=0.001; clrscr(); printf("Maksymalna pohybka ob4yslen' (napr., 0.0001): "); scanf("%f",&EPS); printf("Maksymalne 4yslo iteracij: "); scanf("%d",&N); printf("\n"); // Виконуємо обчислення для бiжучого значення alpha вiд 1.5 до 2.5 for (alpha=alpha0; alpha<=alpha1+0.001; alpha+=dalpha) { x1=a0; x2=b0; do { n++; if (x1!=x2) { hn=f9(alpha,x1)*(x1-x2)/(f9(alpha,x2)-f9(alpha,x1)); // Обчислюємо наближення Xn x=x1+hn; // Якщо досягнута точнiсть - завершуємо обчислення if (fabs(x1-x)<EPS) break; x2=x1; x1=x; } } // Якщо досягнута максимальна кiлькiсть iтерацiй або Xn = Xn-1 - завершуємо обчислення while ((x1!=x2) && (n<=N)); // Виводимо результати printf("alpha=%.2f\tx=%f\n",alpha,x); } printf("\n"); printf("<Enter> - vyhid"); // Чекаємо натиснення клавiшi i повертаємося до головного меню getch(); } Протокол роботи програми Завдання 1 Rezhym roboty programy [0-zvychajnyj, 1-demonstracijnyj]: 1 Poryadok matryci: 5 Vvedit elementy matryci (po ryadkah) 5 2 -2 1 5 7 4 2 1 7 3 8 -3 0 1 -3 7 -5 2 0 3 -2 5 7 1 Kososymetry4na matrycya: 5 -7 -3 3 -3 7 4 -8 -7 2 3 8 -3 5 -5 -3 7 -5 2 -7 3 -2 5 7 1 <Enter> - vyhid Завдання 2 Rezhym roboty programy [0-zvychajnyj, 1-demonstracijnyj]: 1 Kilkist ryadkiv (M): 5 Kilkist stovpciv (N): 4 Vvedit elementy matryci (po ryadkah) 6 8 2 3 1 -4 6 4 3 5 6 32 3 4 7 -6 3 5 7 8 Vvedit vektor z 5 elementiv: 1 2 3 4 5 Suma elementiv ryadka 1: 19 Suma elementiv ryadka 2: 7 Suma elementiv ryadka 3: 46 Suma elementiv ryadka 4: 8 Suma elementiv ryadka 5: 23 <Enter> - vyhid Завдання 3 Kilkist elementiv mnozhyny M: 4 Vvedit 4 par koordynat [X Y] 0.33 0.4 0.3 0.2 0.3 0.5 1 1 K=1.00: (0.3;0.2), K=1.50: (0.3;0.2), K=2.00: K=2.50: <Enter> - vyhid Завдання 4 Kilkist elementiv mnozhyny M: 4 Vvedit koeficienty 4 pryamyh [A B C] 3 4 -5 6 2 1 4 8 4 2 4 6 xA=5 yA=3 d1=5 d2=8 3.00x + 4.00y + -5.00 = 0, d=4.400 <Enter> - vyhid Завдання 5 Kilkist elementiv mnozhyny M: 4 Vvedit 4 par koordynat [X Y] 3 5 -5 6 2 1 7 3 A=2 B=5 C=-4 d1=3 d2=7 (3.00;5.00), d=5.014 (7.00;3.00), d=4.642 <Enter> - vyhid Завдання 6 Kilkist elementiv mnozhyny M: 5 Vvedit koeficienty 5 pryamyh [A B C] 1 2 6 2 4 -6 3 8 10 3 9 21 2 4 10 2.00x + 4.00y + -6.00 = 0 2.00x + 4.00y + 10.00 = 0 d=5.814 <Enter> - vyhid Завдання 7 Kilkist elementiv mnozhyny M: 4 Vvedit 4 par koordynat [X Y] 5 6 -4 2 1 5 7 3 xA=2 yA=4 xB=-6 yB=2 Cherez tochku (7.00;3.00): 18.137 Cherez tochku (5.00;6.00): 15.310 Cherez tochku (1.00;5.00): 9.030 Cherez tochku (-4.00;2.00): 8.325 <Enter> - vyhid Завдання 8 Maksymalna kilkist elementarnyh vidrizkiv (jmax): 100 Tochist (napr., 0.001): 0.0001 b=2.00 Inj=1.013664 nj=64 e=0.000040 Umova vyhody: |Inj-I(nj-1)|<e b=2.20 Inj=1.045117 nj=64 e=0.000037 Umova vyhody: |Inj-I(nj-1)|<e b=2.40 Inj=1.071500 nj=64 e=0.000034 Umova vyhody: |Inj-I(nj-1)|<e b=2.60 Inj=1.093919 nj=64 e=0.000032 Umova vyhody: |Inj-I(nj-1)|<e b=2.80 Inj=1.113192 nj=64 e=0.000030 Umova vyhody: |Inj-I(nj-1)|<e b=3.00 Inj=1.129927 nj=64 e=0.000028 Umova vyhody: |Inj-I(nj-1)|<e <Enter> - vyhid Завдання 9 Maksymalna pohybka ob4yslen' (napr., 0.0001): 0.0001 Maksymalne 4yslo iteracij: 10000 alpha=1.50 x=1.541202 alpha=1.60 x=1.511922 alpha=1.70 x=1.485748 alpha=1.80 x=1.462203 alpha=1.90 x=1.440901 alpha=2.00 x=1.421530 alpha=2.10 x=1.403834 alpha=2.20 x=1.387601 alpha=2.30 x=1.372654 alpha=2.40 x=1.358843 alpha=2.50 x=1.346041 <Enter> - vyhid
Антиботан аватар за замовчуванням

2015

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!