Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ГОС(1-10).docx
Скачиваний:
2
Добавлен:
13.09.2019
Размер:
1 Мб
Скачать
☆

Двокроковий метод найменших квадратів

1) Нехай , тоді маємо задачу дисперсійного аналізу знаходимо оцінку методом

найменших квадратів: а також залишкову суму квадратів

(*)

де

2) Заміняємо в (*) на :

Оцінка (6)

(6’)

3) Замінюємо на

(7)

Розв’язками задачі кореляційного аналізу для моделі (4), із припущеннями (4’), будуть

оцінки (6) та (7), а залишкова сума квадратів має вигляд (6’)

9.2.Типи даних. Стандартні типи даних (арифметичний та символьний). Структуровані дані та їх типи. Масиви. Файли.

Типи даних. Стандартні типи даних (арифметичний та символьний).

Кожен елемент даних відноситься до одного із скінченої множини типів, допустимих для конкретної версії мови програмування.

Тип - це множина значень, які можуть приймати об’єкти програми, і сукупність операцій, які допускаються над цими значеннями. Наприклад, значення 1,2, ... відносяться до цілочисельного типу , їх можна додавати, множити і виконувати інші арифметичні операції.

Всі типи даних поділяються на дві групи : скалярні (прості) і структуровані (складені).

Скалярні типи в свою чергу діляться на стандартні і визначені користувачем. В мові Pascal для описання типу користувача в загальному випадку використовується зарезервоване слово Type:

Type <ім’я типу> = <значення типу> ;

Для описання змінних будь-якого типу використовують зарезервоване слово var :

var <ім’я змінної>[,<ім’я змінної>] : <ім’я типу> ;

До стандартних скалярних відносяться цілочисельні, дійсні, символьні, булевські типи і також вказівники.

Серед типів користувача найпоиренішими є перелічені та інтервальні типи, які зручно використовувати при описанні масивів.

Цілочисельні типи даних являють собою значення, які можуть використовуватися в арифметичних виразах і займають в пам’яті від одного до чотирьох байт.

Цілочисельні типи в Паскалі :

Тип

Діапазон

Пам’ять (байт)

Byte

0..255

1

Shortint

-128..127

1

Integer

-32768..32767

2

Word

0..65535

2

Longint

-2 31.. 2 31 -1

4

Дійсні типи даних представляють собою дійсні значення, які використовуються в арифметичних виразах і займають в пам’яті від 4 до 10 байт. Паскаль допускає представлення дійсних значень у вигляді як з плаваючою, так і з фіксованою крапкою. В Паскалі визначені такі дійсні типи : real, single, double, extended, comp. Ефективне використання останніх чотирьох типів можливе при наявності сопроцессора і ввімкненій директиві {$N+}.

Символьний тип (char) визначається множиною значень кодової таблиці ПЕОМ. Кожне значення символьного типу має свій код. Для розташування змінної такого типу в пам’яті необхідний один байт. В текстах програм значення змінних та констант символьного типу беруться в лапки. Наприклад :

var a: char;

.............................................

a :=’А’;

Структуровані дані та їх типи. Масиви.Приклади обробки масивів.

Структуровані типи даних визначають впорядковану сукупність скалярних змінних і характеризуються типом своїх компонент. В мові C/C++ допускаються такі структуровані типи даних: строки, масиви, множини, записи, файли а також процедурні типи та об’єкти.

Масив - це структурований тип даних, який складається із фіксованого числа елементів одного типу. Елементами масиву можуть бути дані будь-якого типу, включаючи структуровані. Тип елементів масиву називається базовим. Кількість елементів масиву фіксується при описанні і в процесі виконання програми не змінюється. Доступ до кожного окремого елемента масиву здійснюється шляхом індексування елементів. Індекс елемента масиву по змісту тотожній поняттю індекса компонента вектора. Індекси являють собою вирази будь-якого скалярного типу, окрім дійсного. Крім того в мові С/С++ нема обмеженнь що до значення індексу, відповідальність за те щоб не вийти за межі масиву полягає на програміста.

Для задання масиву використовується наступний способ.

<Тип данних><ім’я змінної’[‘розмір масиву’]’>[,<ім’я змінної>’[‘розмір масиву’]’];

Наприклад :

int A[100];

char c[10],d[16];

Елемент масиву визначається ім’ям масиву та індексом цього елементу, взятим в квадратні дужки : m1[100], m2[15].

Масиви з базовим типом char називаються строками і для їх обробки існують деякі спеціальні функції.

Для задання багатовимірних масивів використовується наступний спосіб

<Тип данних><ім’я змінної’[‘розмір масиву’]’[’[‘розмір масиву’]’]> [, <ім’я змінної’[‘розмір масиву’]’ [ ’[‘розмір масиву’]’]>];

Одновимірні масиви зручно використовувати для представлення векторів, двовимірні - матриць.

Наприклад

int f[9][12];

double r[100][100];

Можна явно не вказувати розмір масиву а відразу ініціалізувати його, в такому випадку система сама визначить розмір.

char S[]={‘a’,’b’,’c’};

int B[ ][ ]={{0,1,2},{4,5,6}};

також можливий такий варіант

float F[4]={1.0,3,4,5};

якщо кількість елементів ініціалізації на достатня то решта заповнюеться нулями , але якщо їх більше ніж потрібно то це викличе помилку.

Елементи масиву розташовуються в пам’яті послідовно один за одним. Багатовимірні масиви розташовуються таким чином, що самий правий індекс зростає першим. Наприклад, двовимірний масив розташовується таким чином, що спочатку йдуть елементи першого рядка, потім другого і т. д.

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

Масиви не можна порівнювати по значенню елементів як це робиться в паскалі, справа в тому що імя масиву це лише показник на перший байт деякої області памяті де зберігаються данні, тому порівняння по типу M1=M2 на справді порівнюеє не значення елементів а значення самих показників.

Серед найпоширеніших операцій над масивами є ініціалізація (онулення всіх елементів), сортування (упорядкування елементів за певними правилами), пошук елементів масиву, які задовольняють деякі вимоги.

Обробка ж окремих елементів масиву нічим не відрізняється від роботи зі звичайною змінною.Для того щоб взяти значення відповідного елементу масиву треба лише написати наступне

long double A[5][5];

long double f;

….

f=A[2][5];

…

Таким чином пи присвоємо змінній f значення елемента масиву A з індексом [2][5].

Індексація завжди починається з нуля.

Набагато зручніше використовувати динамічні масиви

Припустимо нам потрібно в середині программи створита масив типу int розміром N на M. Поступимо наступним чином.

int **A;

A=new int*[N];

for(int I=0;I<N;I++) A[I]=new int [M];

такий підхід досволяє створювати масиви навіть у випадках коли память дуже подріблена.

Найбіль використовуваним структурним типом данних після масивів є структури та класи.

struct NameStruct{

данні

};

напрклад

struct Matrix{

long double **M;

int m,n;

};

Приклад класу матриць.

class CMatr{

public:

CMatr(int m,int n);

~CMatr();

long double GetAij(int i,int j);

void SetAij(int i,int j, long double r);

protected:

Matrix *M;

};

Файли. Послідовні та з прямим доступом.

У мові Паскаль термін “файл” стосується об’єктів, утворених послідовністю компонентів одного типу, причому вважається, що файл міститься зовні програми. Компоненти файлу називаються його елементами. Робота з файлами зводиться до відкриття файла, виконання операцій над його елементами і закриття файла.

Опис файлового типу складаєтья з ключових слів file of та опису типу елементів файлу:

type bf =file of byte;

Елементами файлу можуть бути об’єкти довільного типу, окрім файлового.

Файли, елементи яких типу char називаються текстами і замість file of char їх можна описувати як text. Файли, тип елементів яких не вказано, назавються безтиповими (type bt=file).

Змінна файлового типу не може бути використана у виразах та в операторі присвоєння. Файлова змінна ототожнюєься з деяким фізичним файлом і потім у програмі лише визначає файл, над яким викоруються операції. Зв’язування файлової змінної з фізичним файлом на диску відбувається за допомогою функції assign :

assign (<ім’я змінної>,<ім’я файлу>);

Якщо замість дикового файлу виступає пристрій вводу-виводу (клавіатура,принтер чи дисплей), то <ім’я файлу> буде містити символічну назву цього пристрою.

Створення нового файлу, з заданим ім’ям відбувається через функцію rewrite (<ім’я змінної>).

Для того, щоб отримати доступ до даних, файл необхідно відкрити : reset (<ім’я змінної>).

Зчитування та запис у файл проводяться за допомогою стандаттних процедур вводу-виводу read та write. При роботі з текстами можна також використовувати процедури readln та writeln.

Послідовність елементів файлу встановлює їхній природній порядок, причому в кожен момент часу безпосередньо доступним є один елемент файла. Для доступу до елемента файлу існує абстрактний вказівник файла. Виконувати певні операції можна лише з тим елементом, на який встановлено цей вказівник. Існує також мітка кінця файлу. По мірі зчитування даних із файлу вказівник автоматично встановлюється на наступний елемент, доки не дійде до мітки кінця файлу. При спробі зчитати дані за міткою кінця файлу фіксується помилка вводу-виводу. Для закриття файлу і збереження змін в ньому використовують функцію close (<ім’я змінної>).

В залежності від способу доступу до окремих компонент файлу, останні поділяються на файли з

прямим доступом та послідовні.

Файл с прямим доступом дозволяє прочитати і змінити довільні його компоненти, причому ці компоненти можуть бути вибрані за їхнім порядковим номером. Файли з прямим доступом зберігаються на пристроях прямого доступу (дисках).

Послідовні файли можна обробляти або в режимі запису, або в режимі зчитування. Вони пов’язані з пристроями вводу-виводу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]