Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования Π‘ΠΈ. ИзданиС 3-Π΅, исправлСнноС». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 46

Автор Π‘Ρ€Π°ΠΉΠ°Π½ ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½

7.8.2 Анализ класса символов ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов

НСсколько Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ β€Ήctype.hβ€Ί Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ символов. Π”Π°Π»Π΅Π΅, Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° ΠΏΡƒΠ½ΠΊΡ‚Π°, пСрСмСнная c - это пСрСмСнная Ρ‚ΠΈΠΏΠ° int, которая ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСна Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ unsigned, char ΠΈΠ»ΠΈ EOF. ВсС эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ значСния Ρ‚ΠΈΠΏΠ° int.

isalpha(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли c - Π±ΡƒΠΊΠ²Π°; 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

isupper(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли c - Π±ΡƒΠΊΠ²Π° Π²Π΅Ρ€Ρ…Π½Π΅Π³ΠΎ рСгистра; 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

islower(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли c - Π±ΡƒΠΊΠ²Π° Π½ΠΈΠΆΠ½Π΅Π³ΠΎ рСгистра; 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

isdigit(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли c - Ρ†ΠΈΡ„Ρ€Π°; 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

isalnum(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли ΠΈΠ»ΠΈ isalpha(c), ΠΈΠ»ΠΈ isdigit(c) истинны; 0 Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС.

isspace(c) - Π½Π΅ Π½ΡƒΠ»ΡŒ, Ссли c - символ ΠΏΡ€ΠΎΠ±Π΅Π»Π°, табуляции, Π½ΠΎΠ²ΠΎΠΉ строки, Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π° ΠΊΠ°Ρ€Π΅Ρ‚ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° страницы, Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ табуляции.

toupper(c) - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ c, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΊ Π²Π΅Ρ€Ρ…Π½Π΅ΠΌΡƒ рСгистру.

tolower(c) - Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ c, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΡƒΡŽ ΠΊ Π½ΠΈΠΆΠ½Π΅ΠΌΡƒ рСгистру.

7.8.3 Ѐункция ungetc

Π’ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ содСрТится Π±ΠΎΠ»Π΅Π΅ ограничСнная вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ungetch ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с Ρ‚ΠΎΠΉ, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ написали Π² Π³Π»Π°Π²Π΅ 4. НазываСтся ΠΎΠ½Π° ungetc. Π­Ρ‚Π° функция, ΠΈΠΌΠ΅ΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ

int ungetc(int с, FILE *fp)

отправляСт символ c Π½Π°Π·Π°Π΄ Π² Ρ„Π°ΠΉΠ» fp ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ c, Π° Π² случаС ошибки EOF. Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ символа. Π€ΡƒΠ½ΠΊΡ†ΠΈΡŽ ungetc ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ совмСстно с любой ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π° Π²Ρ€ΠΎΠ΄Π΅ scanf, getc, getchar ΠΈ Ρ‚. Π΄.

7.8.4 ИсполнСниС ΠΊΠΎΠΌΠ°Π½Π΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы

Ѐункция system(char *s) выполняСт ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ систСмы, ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‰ΡƒΡŽΡΡ Π² строкС s, ΠΈ Π·Π°Ρ‚Π΅ΠΌ возвращаСтся ΠΊ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ s, строго говоря, зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Рассмотрим простой ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Π² систСмС UNIX инструкция

system("date");

Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ date, которая Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚ Π΄Π°Ρ‚Ρƒ ΠΈ врСмя Π² стандартный Π²Ρ‹Π²ΠΎΠ΄. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ зависящий ΠΎΡ‚ систСмы статус Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’ систСмС UNIX Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ статус - это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ exit.

7.8.5 Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ malloc ΠΈ calloc динамичСски Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°ΡŽΡ‚ Π±Π»ΠΎΠΊΠΈ свободной памяти. Ѐункция malloc

void *malloc(size_t n)

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° n Π±Π°ΠΉΡ‚ Π½Π΅ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ памяти ΠΈΠ»ΠΈ NULL, Ссли запрос ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ нСльзя. Ѐункция calloc

void *calloc(size_t n, size_t size)

Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° ΠΎΠ±Π»Π°ΡΡ‚ΡŒ, Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ для хранСния массива ΠΈΠ· n ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° (size), ΠΈΠ»ΠΈ NULL, Ссли запрос Π½Π΅ удаСтся ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΡŒ. ВыдСлСнная ΠΏΠ°ΠΌΡΡ‚ΡŒ обнуляСтся.

Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΉ функциями malloc ΠΈ calloc, Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π°Π½ с ΡƒΡ‡Π΅Ρ‚ΠΎΠΌ выравнивания, Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠ³ΠΎ согласно ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΊ Π½Π΅ΠΌΡƒ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° опСрация привСдСния ΠΊ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ‚ΠΈΠΏΡƒ (Как ΡƒΠΆΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ (см. ΠΏΡ€ΠΈΠΌΠ΅Ρ‡. Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 6.5), замСчания ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ΠΈΠΈ Ρ‚ΠΈΠΏΠΎΠ² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹Ρ… функциями malloc ΠΈΠ»ΠΈ calloc, - Π½Π΅Π²Π΅Ρ€Π½ΠΎ. - ΠŸΡ€ΠΈΠΌΠ΅Ρ‡. Π°Π²Ρ‚.), ΠΊΠ°ΠΊ это сдСлано Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

int *ip;

ip = (int *) calloc(n, sizeof(int));

Ѐункция free(p) освобоТдаСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ p, - ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ, ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹ΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ malloc ΠΈΠ»ΠΈ calloc. Никаких ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ Π½Π° порядок, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒΡΡ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π½Π΅Ρ‚, Π½ΠΎ считаСтся уТасной ошибкой освобоТдСниС Ρ‚Π΅Ρ… областСй, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ Π±Ρ‹Π»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Ρ‹ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ calloc ΠΈΠ»ΠΈ malloc.

НСльзя Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅ области памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡƒΠΆΠ΅ освобоТдСны. Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ дСмонстрируСт Ρ‚ΠΈΠΏΠΈΡ‡Π½ΡƒΡŽ ΠΎΡˆΠΈΠ±ΠΊΡƒ Π² Ρ†ΠΈΠΊΠ»Π΅, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡŽΡ‰Π΅ΠΌ элСмСнты списка.

for (p = head; p != NULL; p = p-β€Ίnext) /* ΠΠ•Π’Π•Π ΠΠž */

 free(p);

ΠŸΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ Π±ΡƒΠ΄Π΅Ρ‚, Ссли Π²Ρ‹ Π΄ΠΎ освобоТдСния сохранитС Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π²Π°ΠΌ потрСбуСтся, ΠΊΠ°ΠΊ Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ Ρ†ΠΈΠΊΠ»Π΅:

for (p = head; p != NULL; p = q) {

 q = p-β€Ίnext;

 free(p);

}

Π’ ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 8.7 ΠΌΡ‹ рассмотрим Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Π²Ρ€ΠΎΠ΄Π΅ malloc, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ Π±Π»ΠΎΠΊΠΈ памяти Π² любой ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

7.8.6 ΠœΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΡ‡Π΅ΡΠΊΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

Π’ β€Ήmath.hβ€Ί описано Π±ΠΎΠ»Π΅Π΅ Π΄Π²Π°Π΄Ρ†Π°Ρ‚ΠΈ матСматичСских Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. Π—Π΄Π΅ΡΡŒ ΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅. КаТдая ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° double ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ‚ΠΈΠΏΠ° double.

sin(x) - синус x, x Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…

cos(x) - косинус x, x Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…

atan2(y,x) - арктангСнс y/x, y ΠΈ x Π² Ρ€Π°Π΄ΠΈΠ°Π½Π°Ρ…

exp(x) - ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ функция e Π² стСпСни x

log(x) - Π½Π°Ρ‚ΡƒΡ€Π°Π»ΡŒΠ½Ρ‹ΠΉ (ΠΏΠΎ основанию e) Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ x (xβ€Ί0)

log10(x) - ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ (ΠΏΠΎ основанию 10) Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ x (xβ€Ί0)

pow(x,y) - x Π² стСпСни y

sqrt(x) - ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹ΠΉ x (x β€Ί 0)

fabs(x) - Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ x

7.8.7 Π“Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ случайных чисСл

Ѐункция rand() вычисляСт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ псСвдослучайных Ρ†Π΅Π»Ρ‹Ρ… Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ ΠΎΡ‚ нуля Π΄ΠΎ значСния, Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠΉ константой RAND_MAX, которая ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² β€Ήstdlib.hβ€Ί. ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ случайныС числа ΠΊ значСниям с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, большим ΠΈΠ»ΠΈ Ρ€Π°Π²Π½Ρ‹ΠΌ 0 ΠΈ мСньшим 1, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ»Π΅

#define frand() ((double) rand() / (RAND_MAX+1.0))

(Если Π² вашСй Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅ ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ функция для получСния случайных чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ, Π²ΠΏΠΎΠ»Π½Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡Ρ‚ΠΎ Π΅Π΅ статистичСскиС характСристики Π»ΡƒΡ‡ΡˆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ.)

Ѐункция srand(unsigned) устанавливаСт сСмя для rand. Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ rand ΠΈ srand, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ стандартом ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, пСрСносимыС Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹, рассмотрСны Π² ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π΅ 2.7.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 7.9. РСализуя Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ€ΠΎΠ΄Π΅ isupper, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ Π»ΠΈΠ±ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π»ΠΈΠ±ΠΎ врСмя. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π“Π»Π°Π²Π° 8. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ с систСмой UNIX

Π‘Π²ΠΎΠΈ услуги опСрационная систСма UNIX ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅Ρ‚ Π² Π²ΠΈΠ΄Π΅ Π½Π°Π±ΠΎΡ€Π° систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ фактичСски ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΅Π΅ Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠΌΠΈ функциями ΠΈ ΠΊ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°Ρ‚ΡŒΡΡ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ. Π’ настоящСй Π³Π»Π°Π²Π΅ описано, ΠΊΠ°ΠΊ Π² Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½Ρ‹Π΅ Π²Ρ‹Π·ΠΎΠ²Ρ‹. Если Π²Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚Π΅ Π² систСмС UNIX, Ρ‚ΠΎ эти свСдСния Π±ΡƒΠ΄ΡƒΡ‚ Π²Π°ΠΌ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ нСпосрСдствСнно ΠΈ позволят ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ Ρ‚Π΅ΠΌ возмоТностям, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Ρ‚ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅. Π”Π°ΠΆΠ΅ Ссли Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ Π‘ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС, ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠ΅ рассмотрСнных здСсь ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² всС Ρ€Π°Π²Π½ΠΎ ΠΏΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ вас ΠΊ пониманию программирования Π½Π° Π‘ΠΈ; Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ лишь дСталями) Π²Ρ‹ встрСтитС практичСски Π² любой ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ΠΈ-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, утвСрТдСнная Π² качСствС стандарта ANSI, Π² основном ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ возмоТности систСмы UNIX, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠΌΠΎΠ³ΡƒΡ‚ Π²Π°ΠΌ Π»ΡƒΡ‡ΡˆΠ΅ ΠΏΠΎΠ½ΡΡ‚ΡŒ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.

Π“Π»Π°Π²Π° состоит ΠΈΠ· Ρ‚Ρ€Π΅Ρ… основных частСй, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ…: Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, Ρ„Π°ΠΉΠ»ΠΎΠ²ΡƒΡŽ систСму ΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΡŽ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. Π’ ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Π΄Π²ΡƒΡ… частях прСдполагаСтся Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ знакомство читатСля с внСшними характСристиками систСмы UNIX. Π’ Π³Π»Π°Π²Π΅ 7 ΠΌΡ‹ рассматривали Π΅Π΄ΠΈΠ½Ρ‹ΠΉ для всСх ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм интСрфСйс Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°. Π’ любой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΈΡˆΡƒΡ‚ΡΡ с использованиСм срСдств ΠΈΠΌΠ΅Π½Π½ΠΎ этой ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΠΏΠ°Ρ€Π°Π³Ρ€Π°Ρ„Π°Ρ… ΠΌΡ‹ опишСм Π²Ρ‹Π·ΠΎΠ²Ρ‹ систСмы UNIX ΠΏΠΎ Π²Π²ΠΎΠ΄Ρƒ-Π²Ρ‹Π²ΠΎΠ΄Ρƒ ΠΈ ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΠΊΠ°ΠΊ с ΠΈΡ… ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Ρ‹ стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

8.1 ДСскрипторы Ρ„Π°ΠΉΠ»ΠΎΠ²

Π’ систСмС UNIX Π»ΡŽΠ±Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‚ΡΡ посрСдством чтСния ΠΈ записи Ρ„Π°ΠΉΠ»ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ всС внСшниС устройства, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρƒ ΠΈ экран, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы. Π­Ρ‚ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ всС связи ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ ΠΈ внСшними устройствами ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡŽΡ‚ΡΡ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΅Π΄ΠΈΠ½ΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΡ€ΠΎΠ΄Π½ΠΎΠ³ΠΎ интСрфСйса.

Π’ самом ΠΎΠ±Ρ‰Π΅ΠΌ случаС, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΠΈΡΠ°Ρ‚ΡŒ, Π²Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠΈΠ½Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ систСму ΠΎ дСйствиях, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹ Π½Π°ΠΌΠ΅Ρ€Π΅Π²Π°Π΅Ρ‚Π΅ΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Ρ„Π°ΠΉΠ»Π°; эта ΠΏΡ€ΠΎΡ†Π΅Π΄ΡƒΡ€Π° называСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ΠΌ Ρ„Π°ΠΉΠ»Π°. Если Π²Ρ‹ ΡΠΎΠ±ΠΈΡ€Π°Π΅Ρ‚Π΅ΡΡŒ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ», Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π΅Π³ΠΎ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ»ΠΈ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ. БистСма провСряСт ваши ΠΏΡ€Π°Π²Π° Π½Π° эти дСйствия (Ρ„Π°ΠΉΠ» сущСствуСт? Π²Ρ‹ ΠΈΠΌΠ΅Π΅Ρ‚Π΅ ΠΊ Π½Π΅ΠΌΡƒ доступ?) ΠΈ, Ссли всС Π² порядкС, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ нСбольшоС Π½Π΅ΠΎΡ‚Ρ€ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ Ρ†Π΅Π»ΠΎΠ΅, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ дСскриптором Ρ„Π°ΠΉΠ»Π°. Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° осущСствляСтся Π²Π²ΠΎΠ΄-Π²Ρ‹Π²ΠΎΠ΄, идСнтификация Ρ„Π°ΠΉΠ»Π° выполняСтся ΠΏΠΎ Π΅Π³ΠΎ дСскриптору, Π° Π½Π΅ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ. (ДСскриптор Ρ„Π°ΠΉΠ»Π° Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π΅Π½ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌΡƒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŽ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠΌΡƒ Π² стандартной Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅, ΠΈΠ»ΠΈ хэндлу (handle) Π² MS- DOS.) Вся информация ΠΎΠ± ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΎΠΌ Ρ„Π°ΠΉΠ»Π΅ хранится ΠΈ обрабатываСтся ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой; ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ обращаСтся ΠΊ Ρ„Π°ΠΉΠ»Ρƒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· Π΅Π³ΠΎ дСскриптор.