МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
Національний університет “Львівська політехніка”
МАСИВИ І ФАЙЛИ В МОВІ ПРОГРАМУВАННЯ С
Інструкція
до Лабораторної роботи № 4
з курсу “Проблемно-орієнтовані мови програмування”
для студентів базового напрямку 6.08.04
"Комп’ютерні науки"
ЗАТВЕРДЖЕНО
на засіданні кафедри
Системи автоматизованого проектування
Протокол № 1 від 31 серпня 2009 р.
ЛЬВІВ 2009
Масиви і файли в мові програмування С
Інструкції до лабораторної роботи № 4 з курсу “Проблемно-орієнтовані мови програмування” для студентів базового напрямку 6.08.04 "Комп’ютерні науки“
Укл. М. І. Андрійчук, І. І. Чура. -Львів: НУ “ЛП”, 2009 р. - 14 с.
Укладачі М. І. Андрійчук, доц., к. ф.-м. н.
І. І. Чура, доц., к.т.н.
Відповідальний за випуск С. П. Ткаченко, канд. техн. наук, доц.
Рецензенти М. В. Лобур, доктор техн. наук,
В. І. Каркульовський, канд. техн. наук
1. МЕТА РОБОТИ
Мета роботи - навчитися використовувати масиви та користуватися файлами при розв’язанні задач векторного типу.
2. ТЕОРЕТИЧНІ ВІДОМОСТІ
2.1. Масиви
Масив - це послідовно розміщені у пам’яті елементи одного типу. Кожен масив має ім’я. Доступ до окремих елементів масиву відбувається по імені масиву та індексу (порядковому номеру) елемента. Основні властивості масивів:
всі елементи масиву мають однаковий тип;
всі елементи масиву розміщені у пам’яті послідовно - один за одним; індекс першого елемента рівний нулю;
ім’я масиву є вказівником-константою, рівною адресі першого елемента масиву.
Ознакою масиву при описі є наявність парних квадратних дужок [ ]. Константа або константний вираз у квадратних дужках задає число елементів масиву.
Одномірний масив
Загальний вигляд стрічки оголошення одномірного масиву наступний:
тип ім’я_масиву[розмірність];
Наприклад:
int x[10];
float y[20];
char name[18];
Загальний розмір масиву в байтах можна обчислити за формулою:
загальний розмір = розмір базового типу * кількість елементів
Для наведеного прикладу розмірність першого масиву 2 * 10 = 20,
другого - 4 * 20 = 80, третього - 1 * 18 = 18 байт.
Схематично одномірний масив можна зобразити так:
Приклад використання:
main()
{
int x[10];
int t;
for(t = 0; t < 10; t++)
x[t] = t;
}
Двомірні масиви
С дозволяє використовувати багатомірні масиви. Найпростіший варіант - двомірний масив. Для оголошення двомірного масиву типу integer twodim розмірністю 10 на 20 потрібно описати його наступним чином:
int twodim[10][20];
Будьте уважні, на відміну від інших мов програмування розмірності масиву відокремлені одна від одної квадратними дужками.
Отже, для доступу до елемента з індексами 3, 5 масиву twodim служить наступний запис twodim[3][5]. Наступний приклад демонструє роботу з двомірним масивом, а саме, присвоєння кожному елементу цього масиву суму відповідних індексів:
main()
{
int t, i, num[3][4];
for(t = 0; t < 3; t++)
for(i = 0; i < 4; i++)
num[t][i] = i + t;
}
Двомірні масиви зберігаються у вигляді матриць, тобто колонок та рядків. Схематично це можна зобразити так:
Масив М[4][8]
Багатомірні масиви
Загальний вигляд оголошення багатомірного масиву наступний:
тип ім’я[розмірність1][розмірність2]...[розмірність N]
Для прикладу покажемо, як оголосити масив цілого типу розмірністю 4 х 10 х 5 :
int three[4][10][5];
А створення чотирьохмірного масиву 4 х 10 х 5 х 7:
int four[4][10][5][7];
Багатомірні масиви використовуються рідко, оскільки це потребує значного обсягу пам’яті, який резервується компілятором. Так для масиву four необхідно 2*4*10*5*7=2800 байт. А якщо подібний масив буде мати тип double (кожний елемент довжиною 8 байт), то для зберігання такого масиву необхідно 11200 байт.
Ініціалізація масиву
С дозволяє ініціалізувати масиви при описі. Загальна форма такої ініціалізації подібна до ініціалізації інших змінних:
тип ім’я[розмірність1]...[розмірністьN] = {список значень};
Cписок значень - це розділений комами список констант. Наприклад:
int i[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Це означає, що i[0] = 1, i[1] = 2, ... , i[9] = 10.
Багатомірні масиви ініціалізуються так само, як і одномірні:
int s[5][2] = {
1, 1,
2, 4,
3, 9,
4, 16,
5, 25
};
Для такої попередньої ініціалізації необхідно знати точну кількість елементів. Щоб не задавати фіксовану розмірність масиву, ініціалізацію можна провести наступним чином:
int i[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
а для багатомірного масиву:
int s[][2] = {
1, 1,
2, 4,
3, 9,
4, 16,
5, 25
};
2.2. Файли, та робота з ними
Файл — це іменований об'єкт, що зберігає дані (програма або будь-яка інша інформація) на якому-небудь носії (дискета, вінчестер, CD). Файл, як і масив, - це сукупність даних, тому вони трохи схожі. Однак, вони мають також істотні розбіжності:
файли, на відміну від масивів, розташовуються не в оперативній пам'яті, а на жорстких дисках або на зовнішніх носіях, хоча файл може розташовуватися на так званому електронному диску (в оперативній пам'яті);
файл не має фіксованої довжини, тобто може збільшуватися й зменшуватися;
перед роботою з файлом його необхідно відкрити, а після роботи - закрити.
Говорячи про файли, слід сказати про файлову систему.
Файлова система - це сукупність файлів і керуючої інформації на диску для доступу до файлів. Або по-іншому - це сукупність програмних засобів для доступу до файлів. Існує досить багато файлових систем, ми будемо говорити про одну з них - про файлову систему MS-DOS.
У файловій системі MS-DOS імена файлів складаються із двох частин, розділених крапкою: ім'я файлу й розширення. Поле ім'я файлу може містити не більше 8 довільних символів з набору дозволених для використання в імені файлу. Поле ж розширення може містити не більше 3 символів з того ж набору. Розширення звичайно вказує на тип збереженої інформації або на структуру файлу, і може взагалі бути відсутнім. Приклади найпоширеніших розширень: exe, com, bat, txt, doc, mp3, htm і ін.
Файли зберігаються в каталогах. Каталоги можуть називатися по тій же системі, що й файли. Допускаються вкладені каталоги (підкаталоги).
Розрізняють два види файлів: текстові й бінарні.
Текстові файли можуть бути переглянуті й відредаговані із клавіатури будь-яким текстовим редактором і мають дуже просту структуру: послідовність ASCII-символів. Ця послідовність символів розбивається на рядки, кожна з яких закінчується двома кодами: 13, 10 (0xD, 0хА). Приклади відомих текстових файлів: *.bat, *.c, *.asm.
Бінарні файли - це файли, які не мають структури текстових файлів. Кожна програма для своїх бінарних файлів визначає власну структуру.
Бібліотека мови С містить функції для роботи як з текстовими, так і з бінарними файлами.
Файлова система С спроектована для роботи з великою кількістью пристроїв: моніторами, дисководами, CD-ROM, принтерами, тощо. Незважаючи на те, що кожний з цих пристроїв має свої особливості, файлова система С трансформує їх в логічний пристрій. Таку абстракцію називають потоком.
Всі потоки однакові за поведінкою, але аналогічно до файлів, розрізняють два типи потоків - бінарні і текстові. Текстовий потік - послідовність ASCII-символів, бінарний - послідовність байтів.
Потік асоціюється з певним файлом при його відкритті. Коли файл є відкритим, між ним і вашою програмою можливий обмін інформацією. Далі наведено декілька функцій для роботи з файлами:
fopen() відкриває потік
fclose() закриває потік
fprintf() запис у файл
fscanf() читання з файлу
feof() повертає істинне значення, якщо досягнуто кінець файлу
remove() знищує файл
Відкриття файлу
Функція відкриття файлу fopen ( ) має два параметри, обоє є стрічковими літералами.
FILE *fopen (char *filename, char *mode);
Перший — задає фізичне місцезнаходження (шлях) і ім'я файлу, що відкривається, а другий - тип доступу до файлу, що може приймати наступні значення:
"г"
Відкрити файл для читання
"w"
Відкрити файл для запису. Якщо файл існує, то його вміст губиться
"а"
Відкрити файл для запису в кінець файлу. Якщо файл не існує, то він створюється
"г+"
Відкрити файл для читання й запису. Файл повинен існувати
"w+"
Відкрити файл для читання й запису. Якщо файл існує, то його вміст губиться
"а+"
Відкрити файл для читання й запису в кінець файлу. Якщо файл не існує, то він створюється
До комбінацій перерахованих вище літералів можуть бути додані також “t” або “b”:
“t”
Відкрити файл у текстовому режимі
“b”
Відкрити файл у бінарному режимі
Можливі наступні режими доступу: "w+b", "wb+", "rw+", "w+t", "rt+" і ін.
Якщо режим не зазначений, то файл відкривається в текстовому режимі.
Якщо ви бажаєте відкрити файл з іменем test для записування у нього, потрібно написати:
FILE *fp; /* вказівник на файл */
fp=fopen(“test”, “w”); /*відкриття файлу для записування */
Тут “w” означає writing - запис. Для читання з файлу потрібно використовувати атрибут “r”- reading - читання.
Закриття файлу
Після роботи з файлом він повинен бути закритий функцією fclose (). Для цього необхідно в зазначену функцію передати покажчик на FILE, що був отриманий при відкритті функцією fopen (). У процесі завершення програми незакриті файли автоматично закриваються системою.
Отже файл, відкритий у попередньому прикладі, можна закрити так:
fclose (fp);
Читання/запис у файл
Для роботи з текстовими файлами в бібліотеці мови С є низка зручних функцій, ми розглянемо найпоширеніші: fprintf ( ), fscanf ( ), fgets ( ), fputs ( ). Формат параметрів-цих функцій дуже схожий на формат знайомих вам функцій printf ( ), scanf ( ), gets ( ) і puts ( ). Схожі не тільки параметри, але й дії. Відмінність складається лише в тім, що printf ( ), scanf ( ) і інші працюють за замовчуванням з консоллю (екран, клавіатура), a fprintf ( ), fscanf ( ) - з файлами (у тому числі й зі стандартними потоками stdin, stdout і ін.), тому в них доданий параметр, що є покажчиком на структуру FILE, що була розглянута вище.
Функції fscanf() та fprintf()
Зв’язавши ці функції з певним потоком, ви можете використовувати їх, як звичайні функції printf () та scanf (). Наприклад:
#include <stdio.h>
main()
{
FILE *my_file;
int i;
int x[10];
my_file = fopen(“test.dat”, “w”); /*відкриття файлу*/
for(i = 0; i < 10; i++) /*запис у файл */
fprintf(my_file, “%d ”, i);
fclose(my_file);
my_file = fopen(“test.dat”, “r”);
for(i = 0; i < 10; i++) /*зчитування з файлу*/
fscanf(my_file, “%d ”, &x[i]); /* присвоєння зчитаних */
/* значень елементам масиву */
fclose(my_file);
remove(“test.dat”); /*знищення файлу*/
}
Якщо вивчити вміст файлу, створеного цією програмою, то видно, що дані в ньому розташовуються так само, як розташовувалися б на екрані, якби використовувалася функція printf ( ).
Функції для роботи з текстовими файлами зручно використовувати при створенні текстових файлів, веденні файлів-протоколів (log-файлів) і т. п. Але при створенні баз даних доцільно використовувати функції для роботи з бінарними файлами: fwrite ( ) і fread ( ). Ці функції без яких-небудь змін копіюють блок даних з оперативної пам'яті у файл і, відповідно, з файлу – в пам’ять. Такий спосіб обміну даними вимагає менше часу:
unsigned freed (void *ptr, unsigned size, unsigned n, FILE *stream);
unsigned fwrite(void *ptr, unsigned size, unsigned n, FILE*stream);
де:
*ptr - вказівник на буфер;
size - розмір блоку;
n - кількість блоків;
*stream - вказівник на структуру FILE відкритого файлу.
Першим параметром передається вказівник на буфер, у який будуть поміщені дані з файлу функцією fread ( ) або з якого дані будуть прочитані у файл функцією rwrite ( ). Наступні два параметри задають розмір блоку і відповідно, кількість блоків, що читаються/записуються. Останній параметр - вказівник на структуру FILE.
Важливо зрозуміти, що немає однозначного методу, який можна було б використовувати для відмінності текстового файлу від бінарного, тому будь-який бінарний файл може бути відкритий для роботи з ним як з текстовим; а текстовий може бути відкритий як бінарний. Але такий варіант роботи з файлом звичайно приводить до помилок. Тому рекомендується працювати з конкретним файлом у тім режимі, у якому він був створений.
Використання функції feof ( )
Функція feof ( ) повертає істинне значення у випадку досягнення кінця файлу, і нуль - в протилежному випадку. Наприклад у попередньому прикладі операція зчитування з файлу може виглядати наступним чином:
i = 0;
while( !feof(my_file))
fscanf(my_file, “%d ”, &x[i++]);
...
Більш повну інформацію про роботу з файловою системою С Ви зможете знайти в наведеній літературі або контекстній допомозі.
Наведемо приклад типового завдання до даної лабораторної роботи.
Приклад: З файлу прочитати матрицю розмірності 12х12. Порахувати суму елементів над головною діагоналлю, які більші заданого числа (текст програми і файл з матрицею знаходяться по замовчуванні в папці TC\BIN\.
#include <stdio.h>
#include <conio.h>
void main ()
{
int a[12][12],s,i,j;
FILE *fp1;
s=0;
clrscr ();
printf ("Pochatok: \n");
printf ("s= %d \n",s);
fp1=fopen("f.txt","r");
for(i=0;i<12;i++)
for(j=0;j<12;j++)
// {
fscanf(fp1,"%d",&a[i][j]);
// }
printf ("\nZadana matrycya: \n");
for(i=0;i<12;i++)
{
for(j=0;j<12;j++)
{
printf("%d ",a[i][j]); }
printf ("\n");
}
for(i=0;i<12;i++)
for(j=0;j<12;j++)
if( (j-i>=0) && (a[i][j]>7) )s+=a[i][j];
// }
fclose (fp1);
printf ("\nSuma vkazanyh elementiv: \n");
printf("\ns= %d",s);
}
Результати
Pochatok:
s= 0
Zadana matrycya:
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
Suma vkazanyh elementiv:
s= 510
Позиціонування у файлі
Кожний відкритий файл має так званий вказівник на поточну позицію у файлі (щось подібне до вказівника в пам'яті). Всі операції над файлами (читання й запис) починають виконуватися із цієї позиції. При кожному виконанні функції читання або записи вказівник зміщається на кількість прочитаних або записаних байтів, тобто встановлюється відразу за прочитаним або записаним блоком даних у файлі. У цьому випадку здійснюється так званий послідовний доступ до даних, що дуже зручний, коли нам необхідно послідовно працювати з даними у файлі. Це демонструється у всіх вищенаведених прикладах читання й запису у файл. Але іноді необхідно зчитувати або записувати дані в довільному порядку, що досягається шляхом установки вказівник а на деяку задану позицію у файлі функцією fseek ( ).
int fseek(FILE *stream, long offset, int whence);
Параметр offset задає кількість байтів, на яку необхідно змістити вказівник відповідно параметру whence. Наведемо значення, які може приймати параметр whence:
SEEK_SET
0
Зсув виконується від початку файлу
SEEK_CUR
1
Зсув виконується від поточної позиції вказівника
SEEK_END
2
Зсув виконується від кінця файлу
Величина зсуву може бути як додатною, так і від’ємною, але не можна зміститися за межі початку файлу.
Такий доступ до даних у файлі називають довільним.
Іноді необхідно визначити позицію вказівника. Для цього можна скористатися функцією ftell ( ), що повертає значення вказівника на поточну позицію файлу. У випадку помилки повертає число (-1).
Деякі функції бібліотеки мови С для роботи з файлами
char * fgets(char *string, int n, FILE *stream) - зчитує рядок з файлу stream доти, поки не будуть зчитані (n-1) символів, або символ переходу рядка, або досягнуть кінець файлу. Повертає вказівник на string, а у випадку помилки або при досягненні кінця файлу - NULL-вказівник.
int fputs(char *string, FILE *stream) - копіює у файл символьний рядок (до нуль-термінатора) з пам'яті, на яку вказує string. Повертає код останнього записаного у файл символу, при помилці - EOF.
int fsetpos(FILE *stream, const long *pos) - установлює значення вказівника читання/запису (вказівник на поточну позицію) файлу в позицію, задану значенням по вказівнику pos. Повертає 0 при коректному виконанні й будь-яке ненульове значення при помилці.
int fgetpos(FILE *stream, long *pos) - поміщає в змінну, на яку вказує pos, значення покажчика на поточну позицію у файлі. Повертає 0 при коректному виконанні й будь-яке ненульове значення при помилці.
У мові С є можливість обробки файлів, використовуючи дескриптори. Дескриптор (handle) - це ціле число, що система ставить у відповідність відкритому файлу й надалі використовує в операціях роботи з файлом.
Нижче наводиться опис деяких функцій, що працюють із дескрипторами. Для застосування цих функцій необхідно підключити до програмного модуля заголовний файл <io.h>.
int open(char *filename, int access [, unsigned mode ]) — функція виконує відкриття файлу. Повертає дескриптор файлу або (-1) при невдалому завершенні операції. Параметр access задає режими доступу до файлу. При роботі з дескрипторами необхідно підключати заголовний файл <fcntl.h>, у якому описані нижче вказані константи.
O_RDONLY
0x00 i
Відкрити тільки для читання
O_WRONLY
0x002
Відкрити тільки для запису
O_RDWR
0X004
Відкрити для читання/запису
O_CREAT
0x100
Створити й відкрити файл. Якщо файл існує, то він просто відкривається
O_EXCL
Використовується тільки з 0_CREAT. Якщо файл існує, то операція перерветься з помилкою
O_TRUNC
При відкритті урізати довжину існуючого файлу до нуля
O_BINARY
Відкрити файл у бінарному режимі
O_TEXT
Відкрити файл у текстовому режимі
int close(int handle) — закриває файл, відкритий функцією ореn ( ). Повертає 0, якщо закриття пройшло успішно, інакше - (-1).
long keekfint handle, long offset, int fromwhere) - функція встановлює вказівник запис/читання файлу на позицію offset у напрямку, зазначеному fromwhere (див. вище опис fseek).
long tell(int handle) — повертає в байтах (від початку файлу) поточну позицію вказівника запис/читання. У випадку помилки - (-1).
long filelength(int handle) - повертає розмір файлу в байтах.
int chsize(int handle, long newsize) - функція виконує зміну розміру файлу. Ознака кінця файлу встановлюється після байта з номером newsize. Повертає 0, якщо розмір файлу був змінений, інакше - (-1).
int read(int handle, void *buf, unsigned len) — читає len байтів з файлу в область пам'яті, на яку вказує buf. Повертає кількість прочитаних байтів.
int write(int handle, void *buf, unsigned len) — записує len байтів у файл із області пам'яті, на яку вказує buf. Повертає кількість записаних байтів.
У ряді завдань необхідно перейти від вказівника на файл до дескриптора файлу. У таких випадках використовується функція.
int fileno(FILE *stream) — функція повертає дескриптор файлу, пов'язаний з вказівником на файл stream.
Наприклад, для визначення довжини файлу можна використовувати наступну групу операторів:
int fd; // Дескриптор файлу
FIb *f; // Вказівник на файл
long 1;, // Довжина файлу
fd=fileno(f); // Перехід від вказівника на файл до дескриптора
l=filelength (fd); // Довжина файлу
3. КОНТРОЛЬНІ ЗАПИТАННЯ
Який загальний вигляд масиву ?
Як обчислити розмір масиву ?
В якій послідовності розміщуються в памяті елементи двовимірного масиву ? Записати на прикладі елементів матриці .
Які параметри має функція відкриття файлу fopen ( ) ?
Які функції для роботи з файлами ви знаєте ?
4. КОНТРОЛЬНЕ ЗАВДАННЯ
Ознайомитись із особливостями використання масивів та вказівників у мові С.
Навчитися користуватися функціями для роботи з файлами.
Одержати індивідуальне завдання.
Скласти програму на С, що дозволяє із використанням масивів, вказівників та файлових функцій реалізувати розв’язок поставленої задачі.
Виконати обчислення по програмі.
5. ЗМІСТ ЗВІТУ
Мета роботи.
Короткий опис особливостей застосування масивів, вказівників та файлових функцій у С.
Індивідуальне завдання.
Текст програми на С.
Результати обчислень по програмі.
Аналіз результатів, висновки.
6. СПИСОК ЛІТЕРАТУРИ
Керниган Б., Ритчи Д. Язык программирования С. - М. - Финансы и статистика. - 1992. – 272 с.
Уэйт М., Прата С., Мартин Д. Язык С. Руководство для начинающих. - М. - Мир. - 1988. –512 с.
Глинський Я. М., Анохін В. Є., Ряжська В. А. C++ i C++ Builder. – Львів: Деол. – 2003. – 192 с.
Герберт Шилдт. Полный справочник по C++. М. – С.-П.-К., Вильямс. – 2003. – 800 с.
Демидович Е. М. Основы алгоритмизации и программирования. Язык Си. (Учебное пособие). – Санкт-Петербург: “БХВ Петербург”. – 2006. – 439 с.
7. ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
З файлу F1 прочитати матрицю А(10,12). Переставити стовпці цієї матриці так, щоб сума елементів кожного стовпця зростала. Результат записати в файл F2.
З файлу F1 прочитати матрицю А(10,10) поміняти місцями елементи головної і побічної діагоналей.
З файлу F1 прочитати матрицю А(10,16) визначити всі сідлові точки цієї матриці, вивести їх значення і індекси. Сідловою точкою називається елемент матриці яким є найменший у своєму рядку і найбільший у своєму стовпці або навпаки.
У файлі F матриця дійсних чисел розміром n*2n. Сформувати масив В, елементами якого є нулі і одиниці. , якщо всі елементи і-го рядка менші за дійсне число х і , якщо хоча б один елемент рядка більший від х.
У файлі F1 задана матриця цілих чисел А(10,10) знайти номер рядка, всі елементи якого є парними числами і номер стовпця елементи якого є монотонно зростаючою послідовністю.
Прочитати з файлу F1 матрицю А(12,14) переставити рядки матриці таким чином, щоб кількість ненульових елементів зростала від першого рядка до останнього.
З файлу F1 прочитати матрицю дійсних чисел А(8,8). Сформувати дві квадратні матриці В(8,8) і С(8,8) елементи яких визначаються з таких виразів: результати записати у файлі F2 i F3.
Сформувати матрицю А(7,7) перший рядок якої задається формулою , (j=1,2,…7), другий - (j=1,2,…7) кожен наступний рядок формується як сума двох попередніх. Результат записати в файл F.
З файлу F прочитати матрицю А(10,16). Відсортувати кожен рядок цієї матриці по зростанню.
З файлу F1 прочитати матрицю дійсних чисел А(10,10). Знайти суму елементів розміщених над головною діагоналлю.
Сформувати квадратну матрицю, елементи якої визначаються із співвідношення: , (i,j=1,,2,…8). Результат записати у файл. Знайти найменший елемент цієї матриці.
У файлах F1 і F2 записано одномірні масиви А(10) і В(20). Сформувати двомірну матрицю С(20,10) елементи якої обчислюються за формулою: . Результат записати у файл F3.
З файлу F1 прочитати матрицю A(10,20). Обчислити суму елементів кожного рядка, записати в масив В(10) відсортувати елементи цього масиву по зростанню.
З файлу F1 прочитати матрицю A(10,10) визначити чи є ця матриця симетричною відносно головної діагоналі.
З файлу IN прочитати матрицю дійсних чисел A(10,10) Обчислити скалярний добуток рядка в якому міститься найбільший елемент матриці на стовпець з найменшим елементом. Результуючий масив записати у файл REZ.
З файлу F1 прочитати матрицю A(15,15) і визначити чи є ця матриця логічним квадратом, тобто такою в якої сума елементів у всіх рядках і стовпцях однакова.
Прочитати з файлу F1 матрицю A(15,18) переставити рядки матриці таким чином, щоб сума елементів кожного рядка спадала від першого рядка до останнього.
З файлу прочитати квадратну матрицю S(10,10) пронормувати кожен рядок цієї матриці на елемент найбільший по модулю. Результат записати в файл REZ.
Задано одномірний масив Х(10). Сформувати матрицю S(8,10) виду: Знайти найменший елемент цієї матриці. Матрицю S записати у файл F1.
У файлі F1 задано матрицю дійсних чисел А(12,12) замінити нулями всі елементи, які розміщені на головній діагоналі і знаходяться в діапазоні заданих чисел і .
З файлу F1 прочитати матрицю A(8,12) знайти суму додатніх елементів кожного рядка записати його в масив R і визначити максимальне значення суми.
22. З файлу F1 прочитати матрицю A(10,12) обчислити середнє арифметичне додатніх елементів кожного стовпця. Результат записати в масив В(12).
З файлу F1 прочитати квадратну матрицю A(10,10) знайти суму додатніх елементів, які розміщені під головною діагоналлю і суму від’ємних елементів, які розміщені над головною діагоналлю.
З файлу F1 прочитати матрицю A(10,12.) Знайти максимальний елемент матриці і обнулити рядок і стовпець, в якому він знаходиться.
З файлу F1 прочитати матрицю A(10,12) для кожного рядка матриці обчислити суму квадратів всіх елементів, що лежать в інтервалі [1,7].
З файлу F1 прочитати матрицю A(10,15), знайти найменший модуль між сусідніми елементами. Видрукувати рядок в якому він знаходиться.
З файлу F задано квадратну матрицю A(10,10). Обчислити середнє арифметичне всіх додатніх елементів, що знаходяться під головною діагоналлю.
З файлу F прочитати матрицю A(12,12) обчислити суму всіх елементів, які більші 7 і знаходяться на головній діагоналі і вище.
З файлу F1 прочитати матрицю A(10,10). З файлу F2 матрицю В(10,10) сформувати одномірний масив С(10):
З файлу F задано матрицю S(10,2) де записано координати 10 точок: перша координата по х, друга - по у. З’єднати ці точки і видрукувати масив В в який записати відстані між ними.