- •Лекція 3.
- •Масиви даних і покажчики.
- •Способи оголошення і звернення до елементів одновимірних масивів.
- •Засоби оголошення і звернення до елементів багатовимірних масивів.
- •Розглянемо програму, яка впорядковує рядки заданого масиву в порядку
- •Результати роботи програми такі:
- •Взаємозв’язок між масивами і покажчиками
- •Приклад
- •Питання для самоконтролю.
Розглянемо програму, яка впорядковує рядки заданого масиву в порядку
зменшення кодів першої літери. Нехай в масиві S – п’ять рядків
М


асивm
до впорядкування
|
|
|
|
|
|
|
|
|
|
рядок 1 9
|
m [0] |
|
m [1] |
|
m [2] |
|
m [3] |
|
m [4] |


Введемо масив m покажчиків на рядки масиву S достатньо змінити належним чином значення елементів m. Остаточно для елементів m[0],…m[4] необхідно послідовно вивести на екран рядки, на які вони показують.
Текст програми:
/*Демонстрація масиву покажчиків*/ рядок 1
#include <stdio.h>
main( )
{
int i, j,g, int [5]={0,0,0,0,0};
/*int – допоміжний масив, ініціюється нульовими значеннями*/
char p, s[5] [20], *m[5];
/*m – масив покажчиків на елементи типу char*/
printf(“Ввести пять рядків символів \n”);
for (i=0; i<5; i++)
{
scanf (“%s”, s[i]);
m[i] = &s[i] [0];
} / *масив m буде містити адреси рядків масиву S */
for( i = 0; i<5; i++ )
printf (“рядок - %d; адреса рядка - % p \ n”, i, m [i] );
Впорядкування
рядків масиву S
в порядку спадання кодів першої букви
кожного рядка
*/
for ( i = 0; i<5; i++)
{
p = ‘A’; q = 0;
/*змінній р присвоюється символ ‘A’ з завчасно малим кодом (А – російська буква; в її старшому розряді записана одиниця, як у відємного числа)*/
for ( j = 0; i < 5; i++)
if (S[j] [0] > = p&& int [j] = = 0)
{
p = S[j] [0]; q = j;
}
ind [q] = 1;
/* після виконання вкладеного циклу for j дорівнює номеру рядка за найбільшим кодом першого символа; ind – допоміжний масив, який використовується виключно для повторного звернення до вибранного рядка*/
for ( j=0; j<5; j++ )
if ( S[ j ] [ 0]>=p&& ind[ j ]==0)
{
p = S [ j ] [ 0 ]; g=j;
}
ind [ g ]=1;
/*після використання вкладенногоциклу for g дорівнює номеру рядка з найбільшим кодом першого символа; ind – допоміжний масив, який використовується виключно для повторного звернення до вибраного рядка */
m[i] = &S[q][0];
}
/* остаточний масив m буде містити послідовність покажчиків, невпорядковані рядки масиву S */
puts (“\ n впорядковані рядки”);
for (i = 0; i<5; i ++)
print f (“порядок %d \ t %s \ n”, i, m[i]);
/* виведення на екран впорядкованих рядків */
}
Допоміжний масив ind необхідний для вилучення повторного звернення до рядка. Спочатку всі його елементи мають нульове значення, і це говорить про те, що дозволено вибирати будь – який рядок.
Якщо ind[i] = 1, то і-й рядок вже розглядався і на черговому кроці рішення задачі її потрібно пропустити. На першому кроці значенням q є індекс рядка з найбільшим кодом першої літери ( на рис. це символ 9). На другому кроці рядок з символом 9 видаляється, і значенням q стає індекс рядка із черговим по величині кодом першої літери (на рис. символ 8) і т. д.

