КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Завдання
Void main(void) { int i,j,k; int a[n][n]; system("cls"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf ("a[%d][%d] =", i+1, j+1); scanf ("%d", &a[i][j]); } } printf ("old array\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) printf ("%5d", a[i][j]); printf ("\n"); } bul (a); printf ("\nnew array\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf ("%5d", a[i][j]); } printf ("\n"); } } void bul (int a[ ][n] ) { int i, k, j, c; for (i = 0; i < n; i++) { for (k = n-1; k>=0; k--) { for (j = 0; j < k; j++) { if (a[i][j] < a[i][j+1]) { c = a[i][j]; a[i][j] = a[i][j+1]; a[i][j+1] =c; } } } } }
Приклад фрагменту програми що здійснює сортування елементів одновимірного масиву методом вибору:
for( i = 0; i < n-1; i++ ) { k=i; x=b[i]; for( j=i+1; j < n; j++ ) { if( b[j] > x ) { k=j; x=b[j]; b[k]=b[i]; b[i]=x; } } }
Приклад програми що здійснює сортування елементів одновимірного масиву методом вставки:
for( i = 1; i < n; i++ ) { x=b[i]; j=i-1; while( b[j] < x && j>=0 ) { b[j+1] = b[j]) j--; } b[j+1] = x; }
1. Скласти блок-схему алгоритму та програму мовою Cі згідно з завданням, отриманим від викладача за табл. 1: задану прямокутну матрицю A={aij} відсортувати за вказаним алгоритмом; для відсортованої матриці знайти значення функції F(fi(aij)); алгоритм сортування і обчислення fi(aij) оформити у вигляді функції; елементи матриці вводити з клавіатури; програма повинна вивести на екран відсортовану матрицю, всі значення fi(aij) та значення функції F(fi(aij)).
Таблиця 1
ІНСТРУКЦІЯ ДО ЛАБОРАТОРНОЇ РОБОТИ № 4 ОБРОБКА СИМВОЛЬНИХ РЯДКІВ. РОБОТА З ФАЙЛАМИ
Мета роботи – вивчити елементи мови Сі, рядки, рядкові константи, принципи потокового вводу-виводу, стандартні файли і функції для роботи з ними.
КОРОТКІ ТЕОРЕТИЧНІ ДАНІ 1.1. Ввід-вивід. В стандарті мови Сі відсутні засоби вводу-виводу. Всі операції вводу-виводу реалізуються за допомогою функцій, які знаходяться в бібліотеці мови Сі, яка є в складі конкретної версії системи програмування Сі. Особливістю мови Сі є відсутність заздалегідь спланованих структур файлів. Всі файли розглядаються як неструктурована послідовність байтів. Такий підхід до організації файлів дозволив розповсюдити поняття файлу на різні пристрої. Таким чином одні і ті ж функції бібліотеки мови Сі використовуються як для обміну даними з файлами, так і для обміну з пристроями. Бібліотека мови Сі підтримує три рівні вводу-виводу: потоковий ввід-вивід, ввід-вивід нищого рівня і ввід-вивід для консолі і портів. Останній рівень забезпечує зручний спеціалізований обмін даними з монітором і портами вводу-виводу. 1.2. Потоковий ввід-вивід На рівні потокового вводу-виводу обмін даними відбувається побайтно. Такий ввід-вивід можливий як для власне пристроїв побайтного обміну (друкуючі пристрої, монітор), так і для файлів на диску, хоча пристрої зовнішньої памяті є пристроями поблочного обміну, тобто за одне звернення до пристрою відбувається зчитування чи запис фіксованої порції даних. Найчастіше мінімальною порцією даних, яка приймає участь в обміні даних, є блок розміром 512 байт або 1024 байт. При вводі з диску (при читанні з файлу) дані розміщуються в буфер операційної системи, а потім побайтно або певними частинами передаються програмі користувача. Функції бібліотеки вводу-виводу мови Сі, які підтримують обмін даними з файлами на рівні потоку, дозволяють обробляти дані різних розмірів і форматів, забезпечуючи при цьому буферизований ввід і вивід. Таким чином, потік – це файл разом з доступними засобами буферизації. Працюючи з потоком можна виконувати наступні дії: - відкривати і закривати потоки (звязувати вказівники на потоки з конкретними файлами); - вводити і виводити: символ, рядок, форматовані дані, порцію даних будь-якої довжини; - аналізувати помилки потокового вводу-виводу і умови досягнення кінця потоку (кінця файлу); - керувати буферизацією потоку і розміром буферу; - отримувати і встановлювати вказівник (індикатор) поточної позиції в потоці. Для того щоб можна було використовувати функції бібліотеки вводу виводу мови Сі, в програму необхідно підключити заголовочний файл stdio.h (#include<stdio.h>), який містить прототипи функцій вводу-виводу, а також визначення констант, типів і структур, необхідних для роботи функцій обміну з потоком. 1.3. Відкриття і закриття потоку Перш ніж почати роботу з потоком, його необхідно ініціалізувати, тобто відкрити. При цьому потік зв'язується в програмі зі структурою визначеного типу FILE. Визначення структурного типу FILE є в заголовочному файлі stdio.h. В структурі FILE містяться компоненти, за допомогою яких ведеться робота з потоком, зокрема: вказівник на буфер, вказівник (індикатор) поточної позиції в потоці і інша інформація. При відкритті потоку в програму повертається вказівник на потік, який є вказівником на об'єкт структурного типу FILE. Цей вказівник ідентифікує потік у всіх наступних операціях. Вказівник на потік, наприклад ff, повинен бути оголошений в програмі наступним чином: #include<stdio.h> FILE *ff; Вказівнпик на потік набуває значення в результаті виконання функції відкриття потоку: ff = fopen (імя_файлу, режим_відкриття); Параметри імя_файлу і режим_відкритт є вказівниками на масив символів, які містять відповідно ім'я файлу, зв'язаного з потоком, і дані про режим відкриття. Також ці параметри можуть задаватися і безпосередньо у вигляді рядків при виклику функції відкриття файлу: ff = fopen (“test.txt”,”r”); де test.txt – ім'я деякого файлу, який зв'язаний з потоком. r – визначення одного з режимів роботи з файлом (тип доступу до потоку). Стандартно файл, який зв'язаний з потоком, можна відкрити в одному з нижче перелічених режимів: “w” – новий текстовий файл відкривається для запису. Якщо файл вже існував, то попередній вміст витирається, файл створюється по новому; “r” – існуючий текстовий файл відкривається лише для читання; “a” – текстовий файл відкривається (або створюється, якщо файлу немає) для внесення в нього нової інформації (добавлення в кінець файлу). На відміну від режиму “w” режим “а” дозволяє відкривати вже існуючий файл, не знищуючи його попередньої версії, і записувати в кінець файлу; “w+” – новий текстовий файл відкривається для запису і наступних багаторазових виправлень. Якщо файл вже існує, то попередній зміст витирається. Наступні після відкриття файлу записи і читання з нього не допустимі в будь-якому місці файлу, зокрема запис дозволений і в кінець файлу, тобто файл може збільшуватись («рости»); “r+” – існуючий текстовий файл відкривається як для читання, так і для запису в будь-якому місці файлу; але в цьому режимі неможливий запис в кінець файлу, тобто неможливе збільшення розміру файлу; “а+” – текстовий файл відкривається або створюється (якщо файлу немає) і стає доступним для змін, тобто для запису і для читання в будь-якому місці; при цьому на відміну від режиму “w+” можна відкрити існуючий файл і не знищувати його змісту; на відміну від режиму “r+” в режимі “а+” можна робити запис в кінець файлу, тобто збільшувати його розміри. Потік можна відрити в текстовому або в двійковому (бінарному) режимі. При відкритті потоку можуть виникати наступні помилки: вказаний файл, зв'язаний з потоком, не знайдений (для режиму «читання»); диск заповнений або диск захищений від запису і ін. Необхідно також відмітити, що при виконанні функції fopen() відбувається виділення динамічної пам'яті. При її відсутності встановлюється ознака помилки “Not enough memory” (недостатньо пам'яті). В перелічених випадках вказівник на потік в будь-якому режимі, відмінному від аварійного, ніколи не буває рівним NULL. Наведемо типову послідовність операторів, яка використовується при відкритті файлу, зв'язаного з потоком: if ((ff = fopen(“test.txt”, “w”)) == NULL) { perror(“помилка відкриття файлу test.txt \n”); exit(0); } де NULL – нульовий вказівник, визначений у файлі stdio.h. Після того як файл відкритий, з ним можна працювати, записуючи чи зчитуючи з нього інформацію (в залежності від режиму роботи). Відкриті на диску файли після закінчення роботи з ними рекомендується закривати явно. Для цього використовується бібліотечна функція: int fclose(вказівник_на_потік); Відкритий файл можна відкрити повторно (наприклад, для зміни режиму роботи з ним) тільки після того, як файл буде закритий за допомогою функції fclose().
1.4. Стандартні функції для роботи з файлами. Для вводу-виводу даних за допомогою стандартних потоків в бібліотеці мови С визначені наступні функції: getchar()/putchar() – ввід-вивід окремого символа; gets()/puts() – ввід-вивід рядка; scanf()/printf() – ввід-вивід в режимі форматування даних. При читанні з файлу за допомогою функції getchar() може бути досягнутий кінець файлу. В цьому випадку операційна система у відповідь на спробу читання символу передає функції getchar() значення EOF (end of file).
Дата добавления: 2015-01-03; Просмотров: 400; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |