Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lexzii_08 / lexs_3_Mas.doc
Скачиваний:
20
Добавлен:
17.05.2015
Размер:
120.32 Кб
Скачать

Розглянемо програму, яка впорядковує рядки заданого масиву в порядку

зменшення кодів першої літери. Нехай в масиві 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) і т. д.

Соседние файлы в папке lexzii_08