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

Задачі.

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 . Скорочення перебору. Дано числовий масив довжини додатних елементів і число . Знайти всі його підмасиви з сумою елементів . В процесі перебору ігнорувати всі підмасиви з сумою елементів більшою від .

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