Вирішення інженерно-технічних задач на ПЕОМ
Поняття алгоритму, способи його представлення. Базові символи та конструкції. Арифметичні та логічні вирази, правила їх формування, запису і виконання. Оператори: прості та складові. Обґрунтування програмування розгалуженого обчислювального процесу.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 08.01.2015 |
Размер файла | 541,0 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Так, для збереження у масиві рядкової константи “Лабораторна робота з рядками”, необхідно описати масив char s[29]. В кінці рядкової константи символ ґ \0 вказувати не потрібно, оскільки це зробить компілятор мови С.
Рядки можна
а) Ініціалізувати при декларуванні.
Наприклад:
charS1[10]=”123456789”,S2[]=”abcdefg”,S3[]={`1',`2',`3',`\0'};,
де в двох останніх випадках розмір рядків буде встановлений за кількістю символів;
б) Вводити з клавіатури, не використовуючи при цьому оператора циклу, подібно звичайним масивам.
Наприклад:
char Tоріс[20];
cout<<”Введіть тему лабораторної роботи:\n”;
cin>>Tоріс;
Двовимірні масиви
Крім одновимірних масивів у С/С++ можливо працювати з багатовимірними масивами, а найчастіше з двовимірними матрицями. Двовимірний масив - це масив, що складається з окремих одновимірних масивів у вигляді рядків, розмірність яких рівна кількості стовпців матриці. Для цього при визначенні двовимірного масиву у квадратних дужках вказується дві розмірності. Оператор опису двовимірного масиву має вигляд:
<тип><ім'я> [<розмір1>][<розмір2>];
Наприклад:
int a[3][5]; // Цілочисельна матриця з 3 рядків і 5 стовпців
Масив зберігається у неперервній області пам'яті по рядках, які зберігаються послідовно один за одним, а не у вигляді звичної з матики матриці:
a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24
| -0-ий рядок- - |-- 1-ий рядок - |- - 2-ий рядок- - |
Для доступу до окремого елемента двовимірного масиву використовується конструкція, яка має вигляд a[i][j], де i - номер рядка, j - номер стовпчика. Кожен індекс може змінюватися від 0 до значення, яке на одиницю менше за значення відповідної розмірності.
Як і для одновимірного масиву, при описі двовимірного масиву можна задавати початкові значення його елементів. Їх записують у фігурних дужках. Елементи масиву ініціалізуються в порядку їх розміщення у пам'яті.
4.1.4 Ініціалізація масивів. Використання функції вводу,виводу та обробки векторів
Дуже важливо уміти ініціалізувати масиви, тобто привласнювати елементам масиву деякі початкові значення. У мові С для цього є спеціальні можливості. Самий простий спосіб ініціалізації наступний: в процесі оголошення масиву можна указати в фігурних дужках список ініціалізаторів:
float а[6]={1.1, 2.2, 3.3, 4.0, 5, 6};
В іншому випадку така форма запису еквівалентна набору операторів:
а[0]=1.1; а[1]=2.2;... а [5] =6.
Багатовимірні масиви, в тому числі і двовимірні масиви, можна ініціалізувати, розглядаючи їх як масив масивів.
Ініціалізації int а[3][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
і
int а[3][5]={{1,2,3,4,5}, {6,7,8,9,10}, {11,12,13,14,15}};
еквівалентні.
Кількість ініціалізаторів не зобов'язана співпадати з кількістю елементів масиву. Якщо ініціалізаторів менше, то значення решти елементів масиву не визначені.
У той же час ініціалізації int а[3][5]={1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11);
і
intа[3][5]={{1, 2, 3}, {4, 5, 6, 7, 8}, {9, 10, 11}};
різні.
Символьнімасивиможутьініціалізуватиякзвичайниймасив:
char[15]={'В', ' о ', ' г ', ' 1 ', ' а ', ' n ', ' d', ' ','С',^',^'};
а можуть - як рядок символів:
"char[15]= Borland C++";
Відмінність цих двох способів полягає в тому, що у другому випадку буде доданий ще і нульовий байт. До того ж другий спосіб коротший. Допускається також оголошення і ініціалізація масиву без явної вказівкирозмірумасиву.
Наприклад, для виділення місця під символьний масив звичайним способом char[80]="Це оголошення і ініціалізація масиву символів"; ми повинні вважати кількість символів в рядку або указати явно більший розмір масиву.
При ініціалізації масиву без вказівки його розміру char[ ]= "Це оголошення і ініціалізація масиву символів"; компілятор сам визначить необхідну кількість елементів масиву, включаючи нульовий байт. Можна оголошувати таким же способом масиви будь-якого типу:
int mass []={!, 2, 3, 1, 2, 3, 4};
При ініціалізації можна не вказувати розмірність масиву, вона обчислюється автоматично (проте для двовимірних масивів кількість стовпців треба указати), а при оголошенні - обов'язково. При оголошенні масивів з невідомою кількістю елементів можна не вказуватирозмір тільки в самих лівих квадратних дужках.
Використання функцій вводу, виводу та обробки векторів.
Для вводу і виводу символьних даних у бібліотеці мови С (файл <stdio.h>)визначені наступні функції:
int getchar() - здійснює введення одного символу з вхідного потоку і повертає один байт інформації (символ) у вигляді значення типу int. Це робиться для розпізнавання ситуації, коли при зчитуванні буде досягнуто кінець файлу.
int putchar (int c) - розміщує в стандартний вихідний потік символ c.
Приклад:
# include <stdio.h>
void main()
{char c, d;
c=getchar(); putchar(c);
d=getchar(); putchar(d);
}
char* gets(char*s) - зчитує рядок s із стандартного потоку до появи символу `\n', сам символ `\n' у рядок не заноситься. Повертає вказівник на цей рядок.
int puts(const char* s) - записує рядок у стандартний потік виводу, додаючи в кінці рядка символ `\n', у випадку вдалого завершення повертає значення більше або рівне 0 і від'ємне значення у випадку помилки.
Також длявводу/виводу рядка можна використовувати функції scanf/printf, відповідно, задавши специфікатор формату %s:
# include <stdio.h>
void main(){
const int n=10;
char s[n];
scanf(“%s”, s); printf(“%s”, s);}
Ім'я масиву є вказівником-константою на початок рядка, тому не слід застосовувати операцію взяття адреси (&), що зазвичай використовується з функцією вводу scanf. Ввід буде здійснюватися до першого символу пропуску. Для того щоб ввести рядок, який складається з декількох слів, використовується специфікатор %c (символи) із зазначенням у ньому максимальної кількості символів, що вводяться, наприклад:
scanf(“%10c”, s);
При виводі рядка на екран можна в специфікації %s зазначити кількість символів, які відводяться під рядок:
printf(“%15s”, s);
Функції вводу/виводу мови С++, описані у заголовному файлі <iostream.h>:
cin>>s; //ввід рядка зі стандартного потоку до появи першого пропуску.
При введенні, наприклад, рядка “Ваня Іванов” в рядок s буде записано лише перше слово рядка, а саме “Ваня\0”.
cout<<s; //вивід рядка в стандартний потік до першого пропуску.
Якщо потрібно ввести рядок, який складається з декількох слів, в одну рядкову змінну, використовують методиgetline або get класу istream, об'єктом якого є cin. Виклик цього методу здійснюється наступним чином: після імені об'єкту cin ставиться крапка, за якою записується ім'я методу:
#include<iostream.h>
int main()
{const in n=80;
char s[n];
cin.getline(s, n); cout<<s<<endl;
cin.get(s, n); cout<< s}
Метод getline зчитуєзвхідногопотоку n-1 символівабоменше (якщосимволпереводурядказустрінетьсяраніше) ізаписуєїхурядковузмінну s. Символпереводурядкатакожзчитується (видаляється) звхідногопотоку, аленезаписуєтьсяурядковузмінну, замістьньогорозміщуєтьсязавершальний '\0'. Якщо врядку вихідних даних більше за n-1 символів, наступне введення буде виконуватися з того ж рядка, починаючи з першого символу, що не був зчитаний.
Метод get працює аналогічно, але залишає в потоці символ переводу рядка. До рядкової змінної додається завершальний '\0'.
4.2 Практична частина
Задано вектор А, який містить n елементів. Математично описати умову задачі, розробити схему алгоритму, скласти таблицю символічних імен, написати і відлагодити С++ програму.
Задано вектор А, який містить n елементів.Замінити нульові елементи масиву квадратом найбільшого значення елементів.
n - кількість елементів.
A - масив.
maxA - найбільший елемент масиву.
z=maxA2 - квадрат найбільшого елементу масиву.
Формульний алгоритм
1) Задати n;
2) Задати A;
3) maxA = a1 ;
4) i=2 ;
5) i > n ;
ні так
6) maxA > ai ; 9) вивід maxA ;
Ні
так
10) z=maxA2 ;
7) maxA = ai ; 11) і=1;
8) i= i+1 ; 12) i > n;
На 5);
13) аі = 0 ; 16) вивід n, A, maxA, z.
кінець
14) ai = z ;
15) і = і+1;
На 12);
Схема алгоритму
Таблиця символічних імен
Математичне ім'я |
Символічне ім'я |
Значення змінної за змістом |
Змінна |
||
Тип |
Значення |
||||
n |
n |
кількість елементів масиву |
цілий |
задається |
|
А |
А |
масив |
масив дійсний |
задається |
|
maxА |
mА |
найбільший елемент масиву |
дійсний |
обчислюється |
|
і |
і |
початковий індекс елементу |
цілий |
обчислюється |
|
z |
z |
квадрат найбільшого елементу |
дійсний |
обчислюється |
Програма
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<iostream.h>
void main()
{
int i,n;
float mA,z,A[25];
clrscr();
printf("Vvesti n=");
scanf("%d",&n);
printf("Zadati elementi masivu A\n");
for(i=0;i<n;i++)
{
cout<<"A["<<i+1<<"]=";
cin>>A[i];
}
clrscr();
printf("\n Kyrsova robota");
printf("\n Zavdannya 4");
printf("\n stydentki gryppi EMS-13-1");
printf("\n Shveth M.U.");
printf("\n Variant #13");
printf("\n Vhidni danni \n n=%d",n);
printf("\n Vektor A\n");
for(i=0;i<n;i++)
printf(" %5.3f",A[i]);
mA=A[0];
i=1;
do
{
if(mA<A[i])mA=A[i];
i=i+1;
}
while (i<n);
z=mA*mA;
for(i=0;i<n;i++)
if(A[i]==0)
{
A[i]=z;
}
printf("\n rezyltati rihenna mA=%5.3f,z=%5.3f",mA,z);
printf("\n Vektor A\n");
for(i=0;i<n;i++)
printf(" %5.3f",A[i]);
}
Результат:
Kyrsova robota
Zavdannya 4
stydentku grypu EMS-13-1
Shvets M.U.
Variant #13
Vhidni danni
n=4
Vektor A
2.000 -7.000 0.000 9.000
rezyltati rihenna mA=9.000, z=81.000
Vektor A
2.000 -7.000 81.000 9.000
Завдання №5
5.1 Теоретична частина
Обґрунтувати програмування вложених циклічних обчислювальних процесів. Багатовимірні масиви. Ініціалізація масивів. Використання функцій та динамічного розподілу пам'яті.
5.1.1 Обгрунтувати програмування вложених циклічних обчислювальних процесів
Обчислювальний процес називається циклічним, якщо деякі дії, що становлять процес, повторюються багаторазово при одноразовому виконанні усього процесу, охоплюючого цей цикл.
Число повторень циклу може бути або відомо заздалегідь, або невідоме. Цикли з відомою кількістю повторень прийнято називати арифметичними (цикл з параметром), а з невідомим - ітераційними.
У арифметичних циклах вводиться спеціальна змінна, звана лічильником циклу, і задається її початкове і кінцеве значення. Після кожного виконання тіла циклу значення лічильника змінюється на одиницю, і вихід з циклу здійснюється після досягнення лічильником його кінцевого значення.
У ітераційних циклах на кожному кроці обчислень відбуваються послідовне наближення і перевірка умови досягнення шуканого результату. Вихід з циклу здійснюється у разі виконання заданої умови. Наприклад, обчислення суми членів ряду з деякою заздалегідь заданою точністю е. При цьому на кожному кроці в суму додається черговий член ряду, і підсумовування виробляється до тих пір, поки значення цього члена не стане менше е.
У ітераційних алгоритмах необхідно забезпечити обов'язкове досягнення умови виходу з циклу (збіжність ітераційного процесу). Інакше станеться нескінченне зациклення алгоритму, що призводить до втрати його результативності.
Поструктурі цикли діляться на простих і вкладених. У першому випадку усередині циклу не знаходиться інші цикли. У другому випадку усередині тіла одного циклу повторюється деяка послідовність операторів, що утворює внутрішній цикл. Глибина вкладення циклів може бути різною.
Програмування вкладених циклів починається з самого зовнішнього в порядку убування їх вкладеності. У тіло зовнішнього циклу включається внутрішній цикл, в якій може включатися ще один цикл, по відношенню до якого попередній внутрішній цикл стає вже зовнішнім і так далі.
Управління умовою свого закінчення здійснюється кожним вкладеним циклом самостійно і не повинно мати зв'язку ні з внутрішнім, ні із зовнішнім по відношенню до нього циклом.
Перевірка закінчення циклів починається з самого внутрішнього і йде в порядку зростання їх вкладеності.
При зміні значення параметра (лічильника) зовнішнього циклу необхідно відновлювати значення параметрів внутрішніх циклів.
Проілюструємо програмування циклічних алгоритмів рядом прикладів.
Арифметичний цикл (цикл з параметром)
Вимагається вичислити набір значень функції f(x) для заданого набору значень аргументу х.
Формування набору значень аргументу визначається одним з двох варіантів.
А. Задані початкове значення аргументу xn, крок його зміни dx і кількість точок рахунку k; тоді набір значень аргументу формується за правилом:
, де i = 1, 2, 3,..., k.
Б. Задані початкове і кінцеве значення аргументу і і крок його зміни dx; набір значень аргументу формується за тим же правилом, але попередньо потрібно обчислити кількість точок рахунку k.
Дані завдання носять назву завдань табулювання, тобто обчислення таблиці значень функції.
Приклад розв'язання задачі табулювання для обчислення набору значень функції y = sinx, де х з кроком dx наведено на рис.
, де int () - ціле від ().
Ітераційний цикл
Визначити мінімальне ціле N, для якого виконується умова N3 - 820N + 1> 100.
Завдання вирішується послідовним перебором значень N до досягнення бажаного результату. Позначивши ліву частину нерівності як S, одержуємо дві умови: продовження циклу S ? 100; вихід з циклу S> 100.
Ітераційний цикл застосовується при обчисленнях значення функції, представленої розкладанням в деякий ряд. Потрібно обчислити значення функції y = sinx для даного значення аргументу x з точністю e шляхом розкладання функціїв степеневий ряд
У загальному вигляді
Відповідна структурограмма представлена на рис. 5.1.1.
Ввод x, |
|
s=0; u=x; k=0 |
|
WHILE |u|>s=s+uk=k+1u=u*(u=u/(2k(2k+1)) |
|
Вывод |
Рис. 5.1.1. Структурограмма розрахунку тригонометричної функції
Вкладений цикл
Потрібно ввести в ЕОМ елементи матриці A, яка містить n рядків і m стовпців. У структурограммі внутрішній цикл організований по параметру j, а зовнішній - по i. Легко переконатися, що в даному прикладі введення елементів матриці проводиться по рядкахвкладеного циклу (введення матриці).
Підсумовуючи сказане, зазначимо, що програмування циклічних процесів розбивається на три етапи:
* вхід в цикл, тобто завдання дій, які забезпечили б коректне значення умови до виконання циклу;
* тіло циклу, що містить повторювану обчислювальну частину і дії щодо зміни умов;
* вихід з циклу, тобто завдання критеріїв зупину.
5.1.2 Багатовимірні масиви
Крім одновимірних масивів у С/С++ можливо працювати з багатовимірними масивами, а найчастіше з двовимірними матрицями. Двовимірний масив - цемасив, що складається зокремих одновимірних масивів у виглядірядків, розмірність яких рівна кількості стовпців матриці. Для цього при визначенні двовимірного масиву у квадратних дужках вказується дві розмірності. Оператор опису двовимірного масиву має вигляд:
<тип><ім'я> [<розмір1>][<розмір2>];
Наприклад:
int a[3][5]; // Цілочисельна матриця з 3 рядків і 5 стовпців
Масив зберігається у неперервній області пам'яті по рядках, які зберігаються послідовно один за одним, а не у вигляді звичної з матики матриці:
a00 a01 a02 a03 a04 a10 a11 a12 a13 a14 a20 a21 a22 a23 a24
| -0-ий рядок- - |-- 1-ий рядок - |- - 2-ий рядок- - |
Для доступу до окремого елемента двовимірного масиву використовується конструкція, яка має вигляд a[i][j], де i - номер рядка, j - номер стовпчика. Кожен індекс може змінюватися від 0 до значення, яке на одиницю менше за значення відповідної розмірності.
Як і для одновимірного масиву, при описі двовимірного масиву можна задавати початкові значення його елементів. Їх записують у фігурних дужках. Елементи масиву ініціалізуються в порядку їх розміщення у пам'яті.
Наприклад: оператор
int с[3][4] = {1,2,3,4,2,3,4,1,3,4,1,2};
визначає матрицю з наступними значеннями елементів: 1 2 3 4
2 3 4 1
3 4 1 2
Можна задавати початкові значення не для всіх елементів масиву. Для цього список значень для кожного рядка береться додатково у фігурні дужки. Наприклад:
int d[3][4] = {{0,1,2},{9,-2},{-7,1,6,8}};
В даному випадку розмірність, що позначає кількість рядків, можна не вказувати.
Для створення динамічного двовимірного масиву необхідно вказати в операції new всі його розмірності, причому ліва розмірність (кількість рядків) може бути змінною.
5.1.3 Ініціалізація багатовимірних масивів
Як і одновимірні, багатовимірні масиви можна ініціалізувати відразу в оголошеннях. Наприклад, у разі оголошення:
іntm[3][3] = (1, 2, 3, 4, 5, 6, 7, 8, 9);
всі елементи матриці m (вона складається з трьох рядків, по три елементи в кожному) будуть заповнені вказаною послідовністю натуральних чисел.
В оголошеннях з ініціалізацією для багатовимірних масивів дозволено опускати розмірність найстаршого виміру (але тільки найстаршого). Попереднє оголошення можна записати ще так:
intm[ ][3] = (1, 2, 3, 4, 5, 6, 7, 8, 9);
У цьому випадку кількість рядків матриці обчислюється як частка від ділення кількості даних у списку ініціалізації на відому кількість елементів в одному рядку матриці. Якщо треба проініціалізувати не всі елементи багатовимірного масиву, а тільки початкові елементи окремих рядків, то застосовують внутрішні роздільні фігурні дужки {}. У разі наступного оголошення:
unsignedmat [4] [6] = {{ 0, 1, 2}, {5, 11}, {17}};
буде сформовано матрицю з чотирьох рядків, по шість цілих беззнакових елементів у кожному. Початкові значення отримають перші три елементи першого рядка матриці mat, два перших елементи другого рядка та один елемент третього, всі інші елементи залишаться непроініціалізованими.
Для доступу доелементів багатовимірного масиву можна застосовувати класичну індексну форму звертання, вказавши в окремих квадратних дужках [ ] значення індекса для кожного з вимірів. Наведемо декілька прикладів: m [0] [2] - третій елемент першого рядка матриці; mat [і] [0] - перший елемент і-го рядка (рахуючи від 0) матриці mat; form3d[k+l] [59] [58] - передостанній елемент (к+1)-ї матриці (двовимірного масиву) із тривимірного масиву form3d (59 - індекс рядка, а 58 - індекс елемента в цьому рядку).
Ініціалізація масиву- це установка початкових значень елементів масиву. Як і звичайні змінні, всі масиви повинні бути оголошені явно, щоб компілятор міг виділити для кожного з них ділянку пам'яті відповідного обсягу. Оголошення масивів виконують через таку синтаксичну конструкцію:
тип елементів ім 'я масиву [ кількість елементів ];
де
тип елементів- довільний допустимий для С++ простий чи складений тип;
імя масиву - ідентифікатор, що відповідає правилам запису імен;
квадратні дужки [ ] -обов'язкова ознака масиву;
кількість елементів- константа чи константний вираз, що визначає розмірність даного масиву.
Наведемо приклади оголошень масивів:
doublearr[15];/* масив з 15-ти дійсних чисел */
intvector[4*N];/* масив з 4*N цілих чисел, N - константа */
Для кожного масиву компілятор виділяє неперервну ділянку пам'яті, обсяг якої дорівнює добутку “кількість елементів” xsizeof(тип елементів). Наприклад, масив аrr буде займати 15x8=120 байтів, а його елементи матимуть індекси від 0 до 14. В оголошенні масиву vector кількість елементів задається виразом, в якому N має бути попередньо визначеною макроконстантою чи константною змінною (хоча деякі компілятори С++ не дозволяють використовувати в оголошеннях масивів змінні з кваліфікатором const).
Оголошуючи масиви, можна відразу ініціалізувати їх елементи. Застосовують дві форми ініціалізації:
- із зазначенням кількості елементів масиву;
- без зазначення кількості елементів масиву.
У першому випадку масив оголошується звичайним чином, після чого у фігурних дужках {} послідовно вказуються константні значення елементів масиву, починаючи від першого (з індексом 0). Наприклад:
intsimplel [5] = (2, З, 5, 7, 11);
5.1.4 Використання функцій та динамічного розподілу пам'яті
Функція- це сукупність оголошень і операторів, зазвичай призначена для вирішення певного завдання. Кожна функція повинна мати ім'я, яке використовується для її оголошення, визначення і виклику. У будь-якій програмі на СІ має бути функція з ім'ям main (головна функція) саме з цієї функції, в якому б місці програми вона не знаходилася, починається виконання програми.
При виклику функції їй за допомогою аргументів (формальних параметрів) можуть бути передані деякі значення (фактичні параметри), використовувані під час виконання функції, функція може повертати деяке (одне!) значення. Це значення, що повертається, і є результат виконання функції, який при виконанні програми підставляється в точку виклику функції, де б цей виклик не зустрівся. Допускається також використовувати функції що не мають аргументів і функції що не повертають ніяких значень. Дія таких функцій може полягати, наприклад, в зміні значень деяких змінних, виводі на друк деяких текстів і тому подібне.
З використанням функцій в мові С++ зв'язано три поняття - визначення функції (опис що виконуються функцією), оголошення функції (завдання форми звернення до функції) виклик функції.
Визначення функції задає тип значення, що повертається, ім'я функції, типи і число формальних параметрів, а також оголошення змінних і оператори, звані тілом функції, і визначальні дію функції. У визначенні функції також може бути заданий клас пам'яті.
У програмах на мові С++ широко використовуються, так звані, бібліотечні функції, тобто функції заздалегідь розроблені і записані в бібліотеки. Прототипи бібліотечних функцій знаходяться вспеціальних заголовних файлах, що поставляються разом з бібліотеками у складі систем програмування, і включаються в програму за допомогою директиви #іnclude.
В мові С++ є п'ять видів пам'яті, серед яких ми виділяємо:
- статична пам'ять;
- динамічна пам'ять.
При статичному розподілі пам'яті вона виділяється при компіляції програми і буде зайнята до завершення програми.
Пря динамічному розподілу пам'яті вона виділяється на етапи виконання програми і звільняється теж в процесі виконання програми. В результаті чого використання пам'яті визначається потребами програми.
Приклад:
…
int n, m, **mas;
cin>>n; // Кількістьрядків
cin>>m; // Кількістьстовбців
mas = new * int [n]; // - виділенняпам'ятіпідп-вказівниківнарядок
for( i=0; і< n; і++)
mas [і] = new int [m]; // - виділенняпам'ятідлякожногорядкапочислустовбців
…
for(i=0; і< n; і++) delete mas [і];
delete[ ] mas;
5.2 Практична частина
Виконати математичний опис задачі, скласти схему алгоритму, таблицю символічних імен, розробити, набрати і відлагодити С++ програму обробки матриці (циклічний обчислювальний процес - вложені цикли) з використанням функцій вводу, виводу та обробки матриць та динамічного розподілу пам'яті. Дано дійсну матрицю А{aij} де i,j=1,2,3,…n.Скласти схему алгоритму і програму визначення координат змінної х, якій присвоїти значення найбільшого з додатніх елементів матриці, розташованих на головній діагоналі і нижче її.
Значення змінної n=5.
Формульний алгоритм
1) **A;
2) Задати n;
3) A=new float *[n];
4) i =1 ;
5) i < n ;
ні
так
на 7); 6) A[i]=new float [n];
7) i =1 ;
8) i < n ;
ні
так
на 13); 9) j = 1 ;
10) j < n;
ні
так
14) i = i+1; 11) ввести А[i,j];
12) j = j + 1;
13) maxi(A;n);
15) i = 1;
16) i < n ; )
так
ні
17) delete A;
18) i = i + 1;
19) кінець
Схема алгоритму
Таблиця символічних імен
Математичне ім'я |
Символічне ім'я |
Значення змінної за змістом |
Змінна |
||
Тип |
Значення |
||||
n |
n |
кількість рядків та стовбців |
цілий |
задається |
|
А |
А |
масив |
масив дійсний |
задається |
|
amx |
max |
найбільший елемент матриці |
дійсний |
обчислюється |
|
mі |
max і |
координати рядка найбільшого елемента |
цілий |
обчислюється |
|
mj |
max j |
координати стовбця найбільшого елемента |
цілий |
обчислюється |
Програма
#include <iostream.h>
#include <conio.h>
#include <math.h>
#include <stdio.h>
void maxi(float**A, int n)
{
float max;
int i,j,imax,jmax;
max=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(A[i][j] >0 && i>=j)
{
max=A[i][j];
imax=i;
jmax=j;
}
if(max!=0)
{
for(i=0; i<n; i++)
for(j=0;j<n;j++)
if(i>=j)
if (A[i][j]>0)
if (max<A[i][j])
{
max=A[i][j];
imax=i;
jmax=j;
}
printf("max elem matr na i pod glavnoy diagonal= [%.1f], s indexami[%i][%i]",max,imax+1,jmax+1);
}
else
cout<<"nemae dodatnih elementiv";
}
void main ()
{
float **A;
int n;
clrscr();
printf("Vvedite kol strok i stolbtsov matruzi A:");
scanf("%d",&n);
A=new float *[n];
for(int j=0;j<n;j++)
A[j]=new float[n];
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
{
printf("A[%d][%d]=",i+1,j+1);
cin>>A[i][j];
}
clrscr();
printf(" Kyrsova robota\n");
printf(" Zavdannya 5\n");
printf("stydentki gr.EMS-13-1\n");
printf("Shvets M.U.\n");
printf("Variant 13\n\n");
printf("\nMatruza A[%i][%i]\n",n,n);
for(i=0; i<n; i++)
{
for(int j=0;j<n; j++)
printf("A[%i][%i]=%.1f\t",i+1,j+1,A[i][j]);
printf("\n");
}
printf("\nVidpjvid:\n");
maxi(A,n);
for(i=0; i<n; i++)
delete A[i];
delete []A;
getch();
}
Результат:
Kyrsova robota
Zavdannya 5
stydentku grypu EMS-13-1
Shvets M.U.
Variant 13
Matruza A
А[1][1]= 0.6 A[1][2]= 1.1 A[1][3]= 0.7 A[1][4]= -4.3 A[1][5]= 2.1
А[2][1]= -1.8 A[2][2]= 3.6 A[2][3]= 5.4 A[2][4]= 3.2 A[2][5]= -0.6
А[3][1]= 1.2 A[3][2]= 2.4 A[3][3]= 1.6 A[3][4]= 4.7 A[3][5]= 1.0
А[4][1]= 3.8 A[4][2]= 5.0 A[4][3]= 7.4 A[4][4]= 8.1 A[4][5]= 6.6
А[5][1]= 3.9 A[5][2]= -1.6 A[5][3]= 2.3 A[5][4]= 4.9 A[5][5]= 2.1
Vidpjvid:
max elem matr na i pod glavnoy diagonal = [8.1], s indexami [4][4],
Висновок
За допомогою мови С++ можна вирішити практично будь-яку задачу програмування. Це одна із найбільш уживаних мов програмування.
За період виконання курсової роботи, я закріпив свої практичні знання у роботі з мовою С++, вдосконалив вміння у розробці програм та алгоритмізації задач. Навчився обробляти вектори, матриці, розробляти програми у мові С++.
У даній роботі згідно свого варіанту, за допомогою програм написаних мовою С++, я розв'язав завдання, склав схеми алгоритмів виконання цих завдань, розробив таблиці символічних імен.
Для всіх хто бажає опанувати науку програмування краще не випускати можливості при теоретичному та практичному вивченні інструментальних засобів мови С++.
Список використаної літератури
1. Березин Б.Н., Березин С.Б.Начальний курс С и С++- М. :ДИАЛОГ-МИФИ.1996 -288с.
2. Подбельский В.В. Язык С++.Учеб. пособ. -2-е изд. Перер. И допол.-М:Финансы и статистика. 1996-650 с...
3. Скляров В.А. Язык С++ и объектно-ориентированное программирование.Мн.: Высш.шк, 1997, 478с
4. Поспелов Д.А. Структурное управление:теория и практика. -М.: Наука,1986.
5. Касаткин А.Н.Профессиональное программирование на языке С++:Управление ресурсами:Справ.пособ. - Мн : Высш. Шк.,1992.-437с.ил.
6. Касаткин А.Н. Валвачев А.Н. Профессиональное программирование на языке С:От TurboC к BorlandC++.Справ.пособ. - М. : Мир, 1992.-240с.ил..
7. Страуструп Б.Язык программирования C++. М.: радио и связь, 1991. - 348 с.
8. Роджерс Д., Адамс Д., Математические основы машинной графики. Пер. с англ. -М. : Машиностроение, 1980.
9. Роджерс Д. Алгоритмические осеовы машинной графики Пер. С англ. -М: Мир, 1989.
Размещено на Allbest.ru
...Подобные документы
Аналіз розроблення та програмування обчислювального процесу лінійної структури, налагодження програм. Вивчення правил запису констант, числових і символьних змінних, типів даних. Побудова алгоритму розв’язування завдання та креслення його блок-схеми.
реферат [2,1 M], добавлен 22.04.2012Основні поняття мови програмування Паскаль, синтаксис. Поняття і види алгоритму; елементи, що використовуються при побудові описів програм: символи, слова, вирази, команди. Рекомендації щодо інсталяції. Вимоги до апаратного та програмного забезпечення.
творческая работа [1,3 M], добавлен 01.02.2011Структура асемблерних програм для COM- та EXE-модулів, виклик процедур, стек. Арифметичні операції над двійковими числами. Команди циклічного зсуву бітів числа. Вирази з визначенням кількох констант. Директиви визначення даних. Адресація зі зміщенням.
лабораторная работа [130,6 K], добавлен 27.02.2013Характеристика мови програмування VBA (Visual Basic for Application): можливості й засоби. Використання редактора Visual Basic. Створення та виконання VBA-програм. Типи даних, змінні й константи, операції й вирази. Керуючі оператори, процедури й функції.
реферат [29,9 K], добавлен 28.06.2011Поняття процедури, її призначення, форма запису, складові частини. Звернення до процедури, формальні параметри та фактичні аргументи, відповідність. Модулі користувача, їх призначення, структура запису, складові частини, підключення модулів до програми.
контрольная работа [587,3 K], добавлен 21.04.2011Програми і мови програмування. Алфавіт мови програмування. Лексеми, зарезервовані слова мови Pascal. Ідентифікатори, типи даних. Арифметичні вирази, операції. Стандартні функції, структура програми. Процедури введення-виведення. Правила написання команд.
лекция [445,0 K], добавлен 24.07.2014Середовище програмування Visual Studio 2010. Функції стандартного введення-виведення. Робота з побітовими операціями. Робота з функцією заміни у рядку символів. Робота з масивами. Тестування алгоритму роботи програми. Представлення двовимірного масиву.
курсовая работа [652,2 K], добавлен 15.01.2014Поняття обчислювального процесу і ресурсу. Планування і диспетчеризація процесів і задач в ОС. Розподіл переривань по рівнях пріоритету. Способи виділення пам’яті під новий розділ. Дисципліни заміщення сегментів. Призначення таблиць ідентифікаторів.
реферат [68,7 K], добавлен 13.06.2010Мова C++ є як одна з найпоширеніших сучасних мов програмування. Базові засоби мови С++, її специфічні риси. Технологія складу програм, специфіка організації процесу програмування. Модульне програмування. Особливості об’єктно-орієнтованого програмування.
курсовая работа [49,6 K], добавлен 26.03.2010Вивчення базових засобів об'єктно-орієнтованих мов програмування і отримання навичок постановки і вирішення різних завдань за допомогою ПЕОМ. Дослідження практичних навичок використання науково-технічної та нормативної літератури. Вибір електродвигунів.
курсовая работа [3,6 M], добавлен 29.03.2023Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.
курсовая работа [41,0 K], добавлен 17.02.2009Використання графічного методу і симплекс-методу при вирішенні задач лінейного програмування. Сутність двоякого симплекс-методу і М-методу, приклади використання. Аналіз методу динамичного програмування. Специфіка вирішення матричної, антагоністичної гри.
контрольная работа [1,1 M], добавлен 02.07.2011Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.
курсовая работа [510,9 K], добавлен 14.03.2013Прості та умовні оператори мови С++. Робота з двовимірними масивами. Пошук та сортування даних. Робота з файлами та з динамічними структурами даних. Опис мови програмування Delphi. Складення програми до розроблених алгоритмів. Організація циклів.
отчет по практике [4,3 M], добавлен 28.08.2014Створення алгоритму фрактального стиснення з втратами для зображень. Основні принципи методу, його обґрунтування та алгоритм реалізації. Характеристика типової схеми фрактального стиснення. Побудова алгоритму, його представлення та афінне перетворення.
курсовая работа [932,1 K], добавлен 10.07.2017Теоретичні основи та приклади економічних задач лінійного програмування. Розробка математичної моделі задачі (запис цільової функції і системи обмежень) і програмного забезпечення її вирішення за допомогою "Пошуку рішень" в Excel симплекс-методом.
курсовая работа [993,9 K], добавлен 10.12.2010Розробка алгоритму програми для проведення розрахунків аналітичних виразів та обробки структурованих даних з метою вирішення завдань управління військами. Заповнення двовимірного масиву програмних елементів речового типу та генератор випадкових чисел.
курсовая работа [1,0 M], добавлен 15.05.2019Базові типи змінних. Елементарний ввід-вивід. Умовні оператори та оператори множинного вибору. Основні функції вводу даних із клавіатури scanf, gets, getchar. Визначення основних (базових) типів даних. Вивід повідомлення при невірно заданому ключі.
контрольная работа [74,6 K], добавлен 03.10.2010Поняття та види векторів. Прості математичні операції над ними. Векторний добуток, його геометричні та алгебраїчні властивості. Визначення та реалізація програмного класу багатовимірних векторів. Перевантажені оператори та дружні оператор-функції.
курсовая работа [110,1 K], добавлен 15.01.2012Операція алгебраїчного додавання, множення, ділення. Алгоритм ділення модулів чисел. Поняття граф-схеми алгоритму та правила її складання. Основні поняття теорії цифрових автоматів. Синтез керуючого автомата. Контроль виконання арифметичних операцій.
реферат [55,4 K], добавлен 24.03.2009