
- •Кафедра теорії та технології програмування
- •Тема 1. Інформаційні моделі та їх життєвий цикл
- •Лабораторна робота 1
- •Тема 3. Структуризація програм та даних.
- •Задачі.
- •Лабораторна робота 2
- •Тема 1: робота з масивами, тестування, налагодження та документування програм.
- •Вказівки:
- •Тема 2: арифметика підвищеної точності, тестування, налагодження та документування програм.
- •Завдання:
- •Вказівки:
- •Додаток навчальний рейтинг
- •Всього: 80
- •Всього: 20
Задачі.
3.1. Дано цілі числа
.
Знайти їх найбільший спільний дільник
та найменше спільне кратне
.
Вказівка. Cпочатку за алгоритмом Евкліда
написати функцію для обчислення НСД(m,n).
3.2. Наступна функція getbits(x,p,n) “вирізає” з x поле довжиною n бітів, розпочинаючи з позиції p, і притискує його до правого краю. Вважається, що 0-й біт – крайній справа в слові, а якщо n та p не належать діапазону 0..15, то функція повертає х. Наприклад, getbits(x,4,3) повертає 4-й,3-й та 2-й біти значення x, притискуючи їх до правого краю, а решта бітів результату - нульові. .
unsigned getbits(unsigned x, int p,int n)
{if (p<0 || n<0 || p>15|| n>15) return x; else
return ((x>> (p+1-n)) & ~(~0<<n));
}
Вираз x>> (p+1-n) зсуває необхідне нам поле до правого краю. Константа ~ 0 складається з одиниць, і її зсув вліво на n бітів (~0<<n) викличе появу n нульових розрядів з її правого краю. Ще одна операція побітової інверсії дозволяє отримати справа n одиниць. Аналогічно написати функції :
а) setbits(x,p,n,y), що повертає значення x, в якому n бітів, розпочинаючи з позиції p, замінено на n правих розрядів параметра y (решта бітів x не змінюються.);
б) invert(x,p,n), що повертає значення x з інвертованими n бітами, розпочинаючи з позиції p (решта бітів x не змінюються.);
в) rightrot(x,n), яка циклічно зсуває x вправо на n розрядів.
У
задачах 3.3-3.17
- фіксовані натуральні числа, задані в
програмах препроцесорними константами,
а вхідні масиви необхідно ініціалізувати.
Напр.,
#define n 5
#define m 3
int A[5]={10,20,30,40, 50};
int B[]={10,20,30,40, 50};
double C[m][m]={{1,1,1},{0,1,1},{0,0,1}};
3.3.
Дано послідовність цілих чисел
і число с.
Знайти перше та останнє місцезнаходження
(перший індекс ліворуч та праворуч)
числа с
у даній послідовності. Побудувати
відповідні рекурентні послідовності
для розв’язку задачі.
3.4 . Що надрукують наступні фрагменти програм:
int a[]={0,1,2,3,4};
int b[3][3]={{1,2,3},{4,5,6},{7,8,9}}; int *pb[3]={b[0],b[1],b[2]}; int *p = b[0];
// а)
void main()
{ int i, *p;
for(p=a,i=0;p+i<=a+4;p++,i++) printf (*(p+i));
}
// б)
void main()
{ int i ;
for(i=0; i<3;i++)
printf( “%d\t,%d\t,%d\t”,b[i][2-i],*b[i],*(*(b+i)+i));
}?
3.5
.
Дано послідовність цілих чисел
.
Знайти найбільший (найменший) її елемент.
Побудувати відповідні рекурентні
послідовності для розв’язку задачі.
3.6.
Бінарний пошук. Умова та сама, що і в
задачі 3.3. Але для послідовності
виконується одна з умов
або
.
3.7.
Дано послідовність цілих чисел
.
Знайти її медіану, тобто різницю між
найбільшим та найменшим елементами.
Поміняти місцями в ній найбільші та
найменші елементи при умові: а) усі
по парно різні; б) у загальному випадку.
3.8. Дано послідовність цілих чисел . Перебудувати її таким чином, щоб: а) спочатку слідували підряд (у тому ж самому порядку) від’ємні її члени, потім - нульові, а потім - уже додатні; б) те саме, що і в а), але нульові члени повинні залишатися на своїх місцях.
3.9.
Дано послідовність цілих чисел
.
Упорядкувати її за зростанням методом
простих вставок . Переглядати послідовно
і кожний новий елемент вставляти на
відповідне місце в уже впорядковану
сукупність
.
Це місце визначається: а) послідовним
порівнянням
з упорядкованими елементами
;
б) методом бінарного пошуку.
3.10. Умова та сама, що і в задачі 3.6, але упорядкувати за зростанням тільки її додатні члени. Решту залишити на своїх місцях.
3.11.
Дано многочлен
степеня
.
Знайти многочлен: а)
; б)
.
3.12.
Дано многочлен
степеня
з цілими коефіцієнтами. Написати функцію
double polinom(int p[] , int n, double x) для обчислення
за схемою Горнера значення
для
даного
Знайти:
а)
,
б)
;
в)
; г) всі цілі корені
.
Функцію polinom зберігати в окремому файлі “p.c”. Для вставки її тексту в основну програму застосувати директиву #include “p.c”.
3.13.
Дано матрицю розміром
.
Розташувати її рядки: а) так, що б перший
стовпчик став упорядкованим за
зростанням; б) за зростанням сум
елементів рядків; в) за зростанням
найменших елементів рядків.
3.14.
За даною числовою квадратною матрицею
порядку
та вектором
довжини
отримати
вектор : а)
,
б)
.
3.15.
За даною булевою квадратною матрицею
порядку
обчислити матрицю
.
Використати алгоритм ”швидкого”
піднесення до степеня (див. 1.17)
3.16.
За даною числовою квадратною матрицею
порядку
отримати матрицю
.
Використати алгоритм “швидкого”
множення (див. 1.17)
3.17. Написати процедуру для розв‘язку методом Гауса системи лінійних рівнянь :
………….
.
Застосувати її для розв‘язку систем:
а)
б)
,
.
3.18.
За
даною квадратною матрицею
порядку
знайти обернену матрицю
3.19 Надрукувати гістограму частоти символів тексту, що вводиться з клавіатури.
3.20 . Написати функцію для знаходження перших простих чисел. Надрукувати перші 100 простих чисел.
3.21
.
Знайти всі прості
числа на інтервалі від 2 до
.
Застосувати гратку Ератосфена: спочатку
з сукупності
відкидаються парні числа, потім з того,
що залишилося – кратні 3 і так далі.
3.22
.
Обчислити надвеликі
числа: а)
,
б) 100!.
3.23
.
Дано числовий масив
довжини
.
Надрукувати всі
його під масивів
3.24
.
Скорочення перебору.
Дано числовий масив довжини
додатних елементів і число
.
Знайти всі його підмасиви з сумою
елементів
.
В процесі перебору ігнорувати всі
підмасиви з сумою елементів більшою
від
.