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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Не вказано

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

Рік:
2007
Тип роботи:
Курсова робота
Предмет:
Програмно-орієнтовані мови програмування

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

Міністерство освіти та науки України Національний університет «Львівська політехніка» Кафедра ПЗ КУРСОВА РОБОТА з курсу «Проблемно-орієнтовані мови програмування» Варіант 6 Завдання 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. Обчислити методом прямокутників інтеграл , a = 0,0; b = 2,0 ... 3,0 9. Обчислити методом січних наближений корінь рівняння: , αпоч.=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
Антиботан аватар за замовчуванням

01.04.2013 11:04-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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