Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_pr1_4567C.doc
Скачиваний:
1
Добавлен:
16.11.2019
Размер:
155.65 Кб
Скачать

Р О Б О Ч А П Р О Г Р А М А

з курсу “Практикум на ЕОМ

Кафедра ттп

1-й курс, 2-й семестр, спеціальність: інформатика.

Всього годин – 64.

Самостійна робота –32.

Форма контролю – рейтингова .

Максимальна кількість балів – 100.

Залік – 61 бал.

.

Тема 4. Покажчики

Покажчики ( вказівники) як тип даних. Адресна арифметика. Покажчики і масиви. Динамічні масиви. Покажчики та аргументи функцій. Символьні покажчики. Масиви покажчиків, покажчики на покажчики. Ініціалізація масивів покажчиків. Покажчики функцій. Аргументи командного рядка. Функції для роботи з покажчиками malloc, calloc . Покажчики на функції.

Задачі

4.1. Написати варіанти бібліотечних функцій strlen, strcpy, strcat, strncpy. strncat, ctrncmp, використовуючи: а) індексацію, б) розіменування покажчиків.

4.2. Написати функції int atoi(char *p ), itoa(int n, char *p) та long htol(char *p), які перетворюють відповідно: а) послідовність 10-их цифр зі знаком або без нього в ціле типу int, б) ціле типу int в послідовність символів - знаку та значущих 10-их цифр, в) послідовність 16-их цифр з префіксом 0х або 0Х (якому може передувати знак) в ціле типу long.

4.3. Написати функцію int getint(int * pn), що здійснює введення з клавіатури у вільному форматі цілого числа і подання його цілим типу int. Функція повертає прочитане ціле через свій параметр. Вона також має сигналізувати про успішність (не успішність) введення числа, а також про досягнення кінця вхідного потоку.

4.4 Написати функцію int getdouble(double *pa) – аналог функції getint для введення дійсних чисел.

4.5. Написати програму калькулятора для обчислення арифметичних виразів, поданих в оберненому польському записі: а) для цілих виразів, використати функцію getint з 4.3); б)(ПС) для дійсних виразів, використати функцію getdouble. Долучити до калькулятора стандартні арифметичні функції та можливість запам’ятовувати в однобуквених змінних проміжні результати обчислень та використовувати їх в подальших обчисленнях. Вирази вводяться з клавіатури.

4.6. Лексемою називається : 1) послідовність символів, розташована між порожніми символами тексту (табуляція, прогалик, кінець рядка, кінець файла), 2) слово латинського алфавіту, 3) ідентифікатор, 4) літерал, 5) десяткове натуральне число, 6) двійкове число, 7) ціле число, 8) дійсне число. Написати функцію int token (char *s, char *t), що здійснює пошук першої лексеми в рядку s і повертає її в рядку t. Функція повертає n>0, якщо лексему знайдено і n її довжина, і 0 - у супротивному.

4.7. Написати функцію для одночасного упорядкування числового масиву за зростанням та спаданням. Результат подати у відповідних масивах покажчиків на його елементи.

4.8. Написати функцію double scalar(double *a, double *b, int n ) для обчислення скалярного добутку двох векторів довільної довжини. Знайти скалярний добуток двох векторів, елементи яких вводяться з клавіатури. Довжина векторів задається в командному рядку.

4.9. З клавіатури читається послідовність рядків. Надрукувати її в лексикографічному порядку.

4.10. Написати програму калькулятора для обчислення цілого арифметичного виразу, поданого в оберненому польському записі. Вираз задається у командному рядку. При цьому кожному операнду і символу операції відповідає окремий аргумент.

4.11. Написати програму tail, що друкує n останніх введених рядків. За замовчуванням, n=5. Але n може бути задано і в командному рядку. Командний рядок tail -n викликає друк останніх n рядків. В кожний момент зберігати в пам’яті не більше n рядків.

4.12.Написати варіанти функцій з передачею результатів через параметри-покажчики для обчислення: а) за трьома дійсними числами, що задають сторони трикутника, обчислює його площу і периметр, б) за цілим n>7 знаходить цілі a,b такі, що 5a+3b=n і a+b є мінімальним.

4.13. Керування купою. Написати функцію char *alloc(int n) для виділення блока вільної пам'яті (купи) заданого розміру. Результатом роботи процедури повинна бути NULL, якщо блок такого розміру виділений бути не може. Написати функцію void afree(Char *p) для звільнення пам'яті (повернення у вільну зону виділеного раніше блоку ). Купа задається статичним зовнішнім масивом з елементами типу char s і розглядається як стек, вершина якого є початком вільної частини купи, а елементи нижче складають задіяну зону купи. Таким чином, і виділення пам'яті і її звільнення жорстко прив'язані до вершини стека і вказані функції реалізують стратегію “останнім прийшов - першим пішов ”. Вершину стека задати статичним зовнішнім покажчиком, що “рухається” у межах стека.

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