p align="left">// Програма Task1.cpp #include <conio.h> #include <process.h> #include <fstream.h> #include <stdio.h> #include <dos.h> #include <math.h> struct Tbook { char name[20]; int index; float price; }; Tbook shelf[15]; FILE *taskin, *taskout; void TASK1() { clrscr(); printf("Chytania fajlu 'task.in'\n\n"); if((taskin = fopen("task.in", "rt")) == NULL) { perror("ERROR\n"); getch(); exit(errno); }; int i = 0; sqrt; while(i < 16) { if(fscanf(taskin,"%2i %11s %f\n", &shelf[i].index, shelf[i].name, &shelf[i].price ) == EOF) break; printf("%2i %11s %2.0f\n", shelf[i].index, shelf[i].name, shelf[i].price); i++; }; fclose(taskin); printf("\n...zavershene!"); float max=shelf[0].price; int ind=0; for(i = 0; i < 16; i++) { if (shelf[i].price>=max){max=shelf[i].price; ind=i;} }; printf("\n\nMaksymalnyj vmist bilka mae \"%s\" - %2.0f\n",shelf[ind].name,shelf[ind].price); printf("\n\nZapys u fajl 'task.out'"); taskout = fopen("task.out", "w+"); fprintf(taskout, "%2i %11s %2.0f", shelf[ind].index, shelf[ind].name, shelf[ind].price); fclose(taskout); printf("...zavershenyj!"); getch(); }; 2.1.3 Тестування завдання Для проведення тестування потрібно першочергово заповнити файл Task_in (з операційної системи). Даний файл було заповннено наступними значеннями(рис. 2.131). Після цього програму потрібно запустити. Результат виконання, а саме інформацію про продукт з найбільшим вмістом білка можна записаний у вихідному файлі Task_out(рис. 2.132). Рис. 2.131 Task_in Рис. 2.132 Task_out 2.2 Завдання 2 Фукція 2.2.1 Постановка завдання Знайти величину і номер першого негативного і останнього позитивного елементів у масиві дійсного типу заданого розміру. 2.2.2 Програма та програмна реалізація Дане завдання реалізоване у модулі TASK2.CPP (TASK2.EXE) У підпрограмі оголошено масив(float a[100]), змінна n-відповідає кількості елементів у масиві, також є дві функції (int pos, int neg) - одана шукає намер першого негативного елементу масиву, інша номер останнього позитивного елементу масиву. Тіло програми повністю побудоване згідно алгоритму(додаток 8). Розглянемо програму: // Task2.cpp #include <iostream.h> #include <conio.h> //-------------------- int pos(float *a, int n) { int i=n-1; while (a[i]<0) i--; return i; } //---------------------- int neg(float *a, int n) { int i=0; for (i=0; i<=n; i++) if (a[i]<0) break; return i; } //------------------------- void TASK2() { clrscr(); int i,n; int k1; int k2; float a[100]; cout<<"Vvedit velychynu masyvu:"; cin>>n; if (n>1) { for (i=0; i<=n-1; i++ ) { cout<<"Vvedit znachenia Masyv["<<i<<"]:"; cin>>a[i]; k1=pos(a,n); k2=neg(a,n); } } cout<<"\n\n"; cout<<"Pershyj negatyvnyj element maje nomer "<<k2+1<<",a jogo vmist: "<<a[k2]<<endl; cout<<"Ostannij pozytyvnyj element maje nomer "<<k1+1<<",a jogo vmist: "<<a[k1]; getch(); } 2.2.3 Тестування завдання Для перевірки даної підпрограми мною були введені дані про кількість елементів у масиві та власне сам масив. В результаті був отриманий результат - номер та власне саме значення першого негативного та останнього позитивного елементів у масиві(рис. 2.321).
Рис. 2.321 Тестовий приклад Task2.срр 2.3 Завдання 3 Масиви 2.3.1 Постановка завдання Елемент матриці називають локальним мінімумом, якщо його значення строго менше значень всіх наявних сусідів. Підрахувти кількість локальних мінімумів заданої матриці і надрукува інформацію про кожного з них. 2.3.2 Програма та програмна реалізація Дане завдання реалізоване у модулі TASK3.CPP (TASK3.EXE) На початку програми оголошений масив р[10][10]. Оголошений лічильник k - який підраховує кількість локальних мінімумві у матрицці. Під час запуску підпрограма запитує користувача розмірності матриці n. Після цього вона заповняється елементами. Наступним етапом є опрацювання матриці оператором for. Після опрацювання виводиться повідомлення про кількість локальних мінімумів k та інфориація про кожного з них. Програма побудована згідно алгоритму: void TASK3()
Розглянемо програму: //Task3.cpp #include <iostream.h> #include <conio.h> void TASK3(){ clrscr(); int i,j,n,k,k1; k=0; int p[10][10]; cout<<"Vvedit znachenia n:"<<"\n"; cin>>n; for (i=0; i<=n-1; i++ ){ for (j=0; j<=n-1; j++){ cout<<"Vvedit znachenia p["<<i<<"]["<<j<<"]: "; cin>>p[i][j];} } for (i=0; i<=n-1; i++ ) for (j=0; j<=n-1; j++){ k1=0; if ((i==0) || (p[i-1][j]>p[i][j])) k1++; if ((i==n-1) || (p[i+1][j]>p[i][j])) k1++; if ((j==0) || (p[i][j-1]>p[i][j])) k1++; if ((i==n-1) || (p[i][j+1]>p[i][j])) k1++; if (k1==4){k++; cout<<"Inform pro lokalnuy minimymiv"<<endl; cout<<"p["<<i<<"]["<<j<<"]="<<p[i][j]<<endl; } cout<<endl;} cout<<"Kilkist lokalnux minimymiv\n"<<k; getch(); } 2.3.3 Тестування завдання Для тесту були введені наступні значення(рис. 2.331). В результаті був отриманий наступний результат:
Рис. 3.31 Тестовий приклад Task3.cpp
2.4 Завдання 4 Операції над лінійним списком. Робота з динамічною пам'яттю 2.4.1 Постановка завдання Визначено наступний покажчик на початок лінійного списку: struct Node // NODE: вузол лінійного списку { Node *pLink; // Pointer LINK: // Покажчик на черговий вузол float Info // INFOrmation: інформація } *Start; Написати прототип, визначення і приклад виклику функції для видалення зі списку k останніх елементів із звільненням зайнятої ними пам'яті. В окркмому випадку, перед викликом цієї функції лінійний список може бути порожній або може містити будь-яку кількість елементів. Усі вихідні дані (покажчик на корінь лінійного списку, кількість що видаляються елементів) і результати виконання функції (покажчик на початок лінійного списку) повинні передаватися через список параметрів. 2.4.2 Програма та програмна реалізація Дане завдання реалізоване у модулі TASK4.CPP (TASK4.EXE) Опишемо алгоритм роботи даної програми: Створено список (Node *pLink;),у якому оголошено наступні функції: void func(Node *Start); // Відповідає за видалення елементів зі списку void vvid(); // Вводимо елементи списку (кінцевий елемент - 0) void vuvid(Node *Start); // Виводить результат, без останніх k- елементів void clear(Node *Start); // Звільняє займану ними пам'ять Розглянемо програму: // Task4.cpp #include <iostream.h> #include <conio.h> struct Node { Node *pLink; float Info; } *Start, *Cur, *New, *Prev; int n=0; void func(Node *Start); void vvid(); void vuvid(Node *Start); void clear(Node *Start); char Empty; void TASK4() { clrscr(); vvid(); vuvid(Start); func(Start); vuvid(Start); clear(Start); getch(); } void vvid() { cout << "Vvedit elementu spusky (kintsevuj element - 0):\n"; Cur = new Node; Start = Cur; do { Prev = Cur; cin >> Cur->Info; Cur->pLink = new Node; Cur = Cur->pLink; n++; } while(Prev->Info != 0); Prev->pLink = NULL; delete Cur; n--; Cur = Start; while(Cur->pLink != NULL) { Prev=Cur; Cur=Cur->pLink; } if(Start==Cur) Start = NULL; else { Prev->pLink=NULL; delete Cur; } } void vuvid(Node *Start) { if(Start != NULL) { cout << "\n\nVvedenuj spusok:\n"; Cur = Start; while(Cur != NULL) { cout << Cur->Info << " "; Cur = Cur->pLink; } cout << "\n\n"; } Else { cout << "\nVu ne vvelu spusok"; Empty ='y'; } } void func(Node *Start) { if(Start != NULL) { int k; Cur=Start; cout << "Vvedit kilkist elementiv do vudalennja: "; cin >> k; if(k<n) { for(int i=0; i<(n-k); i++) { Prev=Cur; Cur=Cur->pLink; } Prev->pLink=NULL; while(Cur!=NULL) {
Страницы: 1, 2, 3, 4
|