Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Metodichka_OT-1.doc
Скачиваний:
14
Добавлен:
17.03.2016
Размер:
1.15 Mб
Скачать

Одновимірні та двовимірні масиви на мові "сі"

Мета практикуму – вивчення методів побудови та обробки одновимірних та двовимірних масивів на мові “СІ”.

  1. ТЕОРЕТИЧНІ ВІДОМОСТІ

    1. За допомогою одновимірних та двовимірних масивів зручно обробляти структури інформації, всі елементи яких належать до одного типу, наприклад, вектори та таблиці. Оголошення масиву містить тип елементів, ім’я масиву, та кількість його елементів, що записані у квадратних дужках [], наприклад:

int a[100];

Char b[30];

Індексація елементів розпочинається з 0 : a[0], a[1], …,a[n-1]. Тобто, в масиві зі ста елементів індекси змінюються від 0 до 99.

Двовимірний масив представляється як одновимірний, елементи якого теж є масивами, наприклад,

Char a[10][20];

Необхідно пам’ятати, що спочатку змінюється крайній правий індекс. За допомогою двовимірних масивів зручно обробляти таблиці даних, при цьому перший індекс масиву є номером рядка, а другий – номером стовпця, наприклад, А[5][9] – елемент, який знаходиться у 6 рядку, 10 стовпці матриці.

    1. Існує сильний взаємозв’язок між вказівниками і масивами. Будь-яка дія, яка досягається індексуванням масиву, може бути виконана за допомогою вказівників. Нехай задано масив:

int a[5];

який містить 5 елементів a[0], a[1], a[2], a[3], a[4].

Якщо int *y; вказівник на змінну цілого типу, то y=&a[0]; – вказівник на нульовий елемент масиву a[0]. Оскільки саме ім’я масиву є адресою його нульового елементу, то інструкцію y=&a[0]; можна записати у вигляді y=a;.

Тоді елемент a[i] можна представити як *(a+i). Якщо y вказівник, то y[i] можна представити *(y+i).

Між іменем масиву і відповідним вказівником є одна відмінність. Вказівник – це змінна. З ним допустимі операції типу y=a; y++;. Ім’я масиву – константа. Тому конструкції типу a=y; a++; z=&a; використовувати неможливо, оскільки значення константи стале і не може бути змінено.

Не можна порівнювати або застосовувати в арифметичних операціях вказівники на різні масиви. Будь-яку адресу можна перевіряти на рівність чи нерівність значенню NULL, яке записується замість 0. Вказівники на елементи одного масиву можна віднімати. Тоді результатом буде число елементів масиву, розміщених між вказівниками.

Приклад 1. Впорядкувати рядок із 10 цілих чисел, які вводяться з клавіатури через пропуски, по зростанню.

#include <stdio.h>

main()

{int m[10],i,n,k,ind;

puts("\nInput string of 10 integer through the spaces");

/*введіть рядок із 10 цілих чисел через пропуски*/

for(i=0;i<10;i++)

scanf("%d",&m[i]);

for(n=9;n>=0;n--)

{k=-32768; /*найменше можливе ціле число*/

for(i=0;i<=n;i++)

if(m[i]>k)

{k=m[i];ind=i;}

m[ind]=m[n];m[n]=k;

}

puts("Constructed string");/*впорядкований рядок*/

for(i=0;i<10;i++) printf("%d ",m[i]);

}

Впорядкування відбувається наступним чином. З поміж усіх 10 елементів знаходиться найбільший і переміщується на 10 позицію. 10-й елемент переміщується на місце максимального. Далі проводиться аналогічна процедура для перших 9 елементів. І так далі, поки не залишиться один елемент.

Приклад 2. Створити масив з п'яти елементів. Кожен з елементів є рядком літер. Впорядкувати масив за зменшенням кодів першої букви рядка. Зв’язок між вказівниками та рядками до і після впорядкування представлено на рис. 1.1.

Рис. 1.1. Зв’язок між вказівниками та рядками до і після впорядкування

#include <stdio.h>

main()

{int i,j,q,ind[5]={0,0,0,0,0};

char p, s[5][20], *m[5];

printf("\nInput 5 raws of symbols\n");

/*введіть 5 рядків символів*/

for(i=0;i<5;i++){printf("Input raw\n");

/*введіть рядок*/

scanf("%s",s[i]);

m[i]=&s[i][0];}

for(i=0;i<5;i++)

printf("Raw %d address of raw - %p\t%s\n",i,m[i],m[i]);

/*виведення на екран номеру рядка, його адреси та вмісту*/

for(i=0;i<5;i++)

{p='A';q=0;

for(j=0;j<5;j++)

if (s[j][0]>=p && ind[j]==0)

{p=s[j][0]; q=j;}

ind[q]=1;

m[i]=&s[q][0];}

puts("\nOrdered raws");/*впорядковані рядки*/

for(i=0;i<5;i++)

printf("Raw %d\t%p\t%s\n",i,m[i],m[i]);

/*виведення на екран номеру рядка, його адреси та вмісту*/}

  1. ЗАВДАННЯ НА РОБОТУ

2.1.Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити елементи з парними індексами середнім арифметичним значенням рядка, в якому знаходяться дані елементи. Вивести на екран задану та результуючу матрицю.

2.2. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити елементи, сума індексів яких кратна 3, максимальним значенням стовпця, в якому знаходяться дані елементи. Вивести на екран задану та результуючу матрицю.

2.3. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Побудувати нову матрицю, кожен елемент якої дорівнює меншому із відповідних елементів вихідної та транспонованої матриці. Вивести результат на екран.

2.4. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Видалити рядок матриці, номер якого задається з клавітури. При цьому всі рядки, які знаходяться під заданим, зсуваються на одну позицію вгору, а останній рядок заповнюється мінімальними елементами стовпців вихідної матриці. Вивести задану та результуючу матрицю на екран.

2.5.Дано вектор розміром n (n<=20), елементи якої задаються з клавітури. Знайти максимальний елемент, який повторюється більше одного разу.

2.6. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Побудувати нову матрицю, кожен елемент якої дорівнює сумі елементів, які знаходяться навколо нього. Вивести задану та результуючу матрицю на екран.

2.7.Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Видалити стовпець матриці, номер якого задається з клавітури. При цьому всі стовпці, які знаходяться справа від заданого, зсуваються на одну позицію вліво, а останній рядок заповнюється максимальними елементами стовпців вихідної матриці. Вивести задану та результуючу матрицю на екран.

2.8.Дано число n та квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Поміняти місцями рядок та стовпець матриці. Вивести задану та результуючу матрицю на екран.

2.9. Дано два вектори розміром n (n<=20), елементи якої задаються з клавітури. Впорядкувати перший вектор за зростанням, другий – за спаданням. Побудувати вихідний вектор, кожен елемент якого дорівнює мінімальному із елементів впорядкованих векторів.

2.10. Дано квадратну матрицю розміром nxn (n<=10), елементи якої задаються з клавітури. Замінити нулями всі елементи матриці, величина яких більша за середнє арифметичне стовпця, в якому знаходиться даний елемент.

  1. КОНТРОЛЬНІ ЗАПИТАННЯ

3.1. Як оголошуються одновимірні та двовимірні масиви.

3.2. Який зв’язок існує між масивами та вказівниками.

3.3. З якого елемента починається індексація масиву.

3.4. Який зв’язок існує між таблицями та масивами.

Комп’ютерний практикум № 14

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