Архив выпускников
 
Уважаемые гости нашего сайта!

Мы рады приветствовать Вас!

Спешим сообщить Вам, этот сайт планировался как место встречи выпускников ТРТИ/ТРТУ/ТТИ ЮФУ, но не стал таковым.

Не теряйте друзей! Будьте на связи!


ывода является написа- ние программы, работающей с файлом, который не связан зара- нее с программой. одной из программ, ко ой скобки, которая завершает блок. 3.2. IF - ELSE Опе
ать некоторое число, отличное от возможного числа строк,
   например -1. Функция осуществляющая вывод, дол- жна печатать строки в
   том порядке, в каком они появляются в массиве указателей. #DEFINE NULL
   0 #DEFINE LINES 100 /* MAX LINES TO BE SORTED */ MAIN() /* SORT INPUT
   LINES */ \( CHAR *LINEPTR[LINES]; /*POINTERS TO TEXT LINES */ INT
   NLINES; /* NUMBER OF INPUT LINES READ */ IF ((NLINES =
   READLINES(LINEPTR, LINES)) >= 0) \( SORT(LINEPTR, NLINES);
   WRITELINES(LINEPTR, NLINES); \) ELSE PRINTF("INPUT TOO BIG TO SORT\N");
   \) #DEFINE MAXLEN 1000 READLINES(LINEPTR, MAXLINES) /* READ INPUT LINES
   */ CHAR *LINEPTR[]; /* FOR SORTING */ INT MAXLINES; \( INT LEN, NLINES;
   CHAR *P, *ALLOC(), LINE[MAXLEN]; NLINES = 0; WHILE ((LEN =
   GETLINE(LINE, MAXLEN)) > 0) IF (NLINES >= MAXLINES) RETURN(-1); ELSE IF
   ((P = ALLOC(LEN)) == NULL) RETURN (-1); ELSE \( LINE[LEN-1] = '\0'; /*
   ZAP NEWLINE */ STRCPY(P,LINE); LINEPTR[NLINES++] = P; \)
   RETURN(NLINES); \) Символ новой строки в конце каждой строки удаляется,
   так что он никак не будет влиять на порядок, в котором сортируются
   строки. WRITELINES(LINEPTR, NLINES) /* WRITE OUTPUT LINES */ CHAR
   *LINEPTR[]; INT NLINES; \( INT I; FOR (I = 0; I < NLINES; I++)
   PRINTF("%S\N", LINEPTR[I]); \) Существенно новым в этой программе
   является описание CHAR *LINEPTR[LINES]; которое сообщает, что LINEPTR
   является массивом из LINES элементов, каждый из которых - указатель на
   переменные типа CHAR. Это означает, что LINEPTR[I] - указатель на
   символы, а *LINEPTR[I] извлекает символ. Так как сам LINEPTR является
   массивом, который передает- ся функции WRITELINES, с ним можно
   обращаться как с указате- лем точно таким же образом, как в наших более
   ранних приме- рах. Тогда последнюю функцию можно переписать в виде:
   WRITELINES(LINEPTR, NLINES) /* WRITE OUTPUT LINES */ CHAR *LINEPTR[];
   INT NLINES; \( INT I; WHILE (--NLINES >= 0) PRINTF("%S\N", *LINEPTR++);
   \) здесь *LINEPTR сначала указывает на первую строку; каждое увеличение
   передвигает указатель на следующую строку, в то время как NLINES
   убывает до нуля. Справившись с вводом и выводом, мы можем перейти к
   сор- тировке. программа сортировки по шеллу из главы 3 требует очень
   небольших изменений: должны быть модифицированы описа- ния, а операция
   сравнения выделена в отдельную функцию. Ос- новной алгоритм остается
   тем же самым, и это дает нам опре- деленную уверенность, что он
   по-прежнему будет работать. SORT(V, N) /* SORT STRINGS V[0] ... V[N-1]
   */ CHAR *V[]; /* INTO INCREASING ORDER */ INT N; \( INT GAP, I, J; CHAR
   *TEMP; FOR (GAP = N/2; GAP > 0; GAP /= 2) FOR (I = GAP; I < N; I++) FOR
   (J = I - GAP; J >= 0; J -= GAP) \( IF (STRCMP(V[J], V[J+GAP]) <= 0)
   BREAK; TEMP = V[J]; V[J] = V[J+GAP]; V[J+GAP] = TEMP; \) \) Так как
   каждый отдельный элемент массива V (имя формального параметра,
   соответствующего

тогда, когда произошло обращение к соответс- твующей функции


Страница помощи