(*comp)(v[i], v[left])
- ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ Π½Π΅ΠΉ. Π‘ΠΊΠΎΠ±ΠΊΠΈ Π·Π΄Π΅ΡΡ Π½ΡΠΆΠ½Ρ, ΡΡΠΎΠ±Ρ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΡΠ°ΠΊΡΠΎΠ²ΠΊΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ; Π±Π΅Π· Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅
int *comp(void *, void *) /* ΠΠΠΠΠ ΠΠ */
Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΎ Π±Ρ, ΡΡΠΎ comp - ΡΡΠΎ ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° int, Π° ΡΡΠΎ ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΡΠΎ, ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ.
ΠΡ ΡΠΆΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ strcmp, ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡΡΡ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡ numcmp, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ Π΄Π²Π΅ ΡΡΡΠΎΠΊΠΈ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Ρ ΠΈΡ ΠΊΠ°ΠΊ ΡΠΈΡΠ»Π°; ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ½ΠΈ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΡΡΡ Π² ΡΠΈΡΠ»ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ atof.
#include βΉstdlib.hβΊ
/* numcmp: ΡΡΠ°Π²Π½ΠΈΠ²Π°Π΅Ρ s1 ΠΈ s2 ΠΊΠ°ΠΊ ΡΠΈΡΠ»Π° */
int numcmp(char *s1, char *s2)
{
double v1, v2;
v1 = atof(s1);
v2 = atof(s2);
if (v1 βΉ v2)
return -1;
else if (v1 βΊ v2)
return 1;
else
return 0;
}
Π€ΡΠ½ΠΊΡΠΈΡ swap, ΠΌΠ΅Π½ΡΡΡΠ°Ρ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ Π΄Π²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½Π° ΡΠΎΠΉ, ΡΡΠΎ ΠΌΡ ΠΏΡΠΈΠ²Π΅Π»ΠΈ ΡΠ°Π½Π΅Π΅ Π² ΡΡΠΎΠΉ Π³Π»Π°Π²Π΅ Π·Π° ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π½Π° void*.
void swap(void *v[], int i, int j)
{
void *temp;
temp = v[i];
v[i] = v[j];
v[j] = temp;
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ ΠΈ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎΠΌ Π΄ΡΡΠ³ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠ΅ΠΉ; ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Π΅ΡΡΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.14. ΠΠΎΠ΄ΠΈΡΠΈΡΠΈΡΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° ΡΠ΅Π°Π³ΠΈΡΠΎΠ²Π°Π»Π° Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -r, ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΠΈΠΉ, ΡΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π½ΡΠΆΠ½ΠΎ ΡΠΎΡΡΠΈΡΠΎΠ²Π°ΡΡ Π² ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΌ ΠΏΠΎΡΡΠ΄ΠΊΠ΅, Ρ. Π΅. Π² ΠΏΠΎΡΡΠ΄ΠΊΠ΅ ΡΠ±ΡΠ²Π°Π½ΠΈΡ. ΠΠ±Π΅ΡΠΏΠ΅ΡΡΡΠ΅, ΡΡΠΎΠ±Ρ -r ΡΠ°Π±ΠΎΡΠ°Π» ΠΈ Π²ΠΌΠ΅ΡΡΠ΅ Ρ -n.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.15. ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -f, Π·Π°Π΄Π°Π½ΠΈΠ΅ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π΄Π΅Π»Π°Π»ΠΎ Π±Ρ Π½Π΅ΡΠ°Π·Π»ΠΈΡΠΈΠΌΡΠΌΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½ΠΈΠΆΠ½Π΅Π³ΠΎ ΠΈ Π²Π΅ΡΡ Π½Π΅Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, a ΠΈ A Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΠ°Π²Π½ΡΠΌΠΈ).
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.16. ΠΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ -d, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΡΡΠ°Π²ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΏΡΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΈ ΡΡΠΈΡΡΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π±ΡΠΊΠ²Ρ, ΡΠΈΡΡΡ ΠΈ ΠΏΡΠΎΠ±Π΅Π»Ρ. ΠΡΠ³Π°Π½ΠΈΠ·ΡΠΉΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΡΠΎΠ±Ρ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠ³ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ -f.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.17. Π Π΅Π°Π»ΠΈΠ·ΡΠΉΡΠ΅ Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΠ»ΡΠΌΠΈ: Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΏΠΎ ΠΏΠΎΠ»ΡΠΌ Π²Π½ΡΡΡΠΈ ΡΡΡΠΎΠΊ. ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΠ»Ρ ΠΏΡΠ΅Π΄ΡΡΠΌΠΎΡΡΠΈΡΠ΅ ΡΠ²ΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ². ΠΡΠ΅Π΄ΠΌΠ΅ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ ΡΡΠΎΠΉ ΠΊΠ½ΠΈΠ³ΠΈ (ΠΠΌΠ΅Π΅ΡΡΡ Π² Π²ΠΈΠ΄Ρ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π» ΠΊΠ½ΠΈΠ³ΠΈ Π½Π° Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠΌ ΡΠ·ΡΠΊΠ΅. - ΠΡΠΈΠΌΠ΅Ρ. ΠΏΠ΅Ρ.) ΡΠΏΠΎΡΡΠ΄ΠΎΡΠΈΠ²Π°Π»ΡΡ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°ΠΌΠΈ: -df Π΄Π»Ρ ΡΠ΅ΡΠΌΠΈΠ½ΠΎΠ² ΠΈ -n Π΄Π»Ρ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΡΡΠ°Π½ΠΈΡ.
5.12 Π‘Π»ΠΎΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ
ΠΠ½ΠΎΠ³Π΄Π° Π‘ΠΈ ΡΡΠ³Π°ΡΡ Π·Π° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°Ρ Π² ΡΠ΅Π±Π΅ ΡΠΊΠ°Π·Π°ΡΠ΅Π»ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ ΠΏΠΎΠ»ΡΡΠΈΠ»ΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π°ΡΠ΅ΠΉ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΄Π΅Π»Π°ΡΡ ΠΏΠΎΡ ΠΎΠΆΠΈΠΌΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈ ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅. Π ΠΏΡΠΎΡΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΡΡΠΎΡ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡ Ρ ΠΎΡΠΎΡ, ΠΎΠ΄Π½Π°ΠΊΠΎ Π² ΡΠ»ΠΎΠΆΠ½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΎΠ½ Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π·Π°ΡΡΡΠ΄Π½Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π½Π°ΡΡΡΠ΅Π½Ρ ΡΠΊΠΎΠ±ΠΊΠ°ΠΌΠΈ ΠΈ ΠΈΡ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ. ΠΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ Π΄Π²ΡΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ:
int *f(); /* f: ΡΡΠ½ΠΊΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΡΠΊ-Π»Ρ Π½Π° int */
int (*pf)(); /* pf: ΡΠΊ-Π»Ρ Π½Π° Ρ-ΡΠΈΡ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΡΡ int */
ΠΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΡΠ΅ΡΠΈΠΊΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ° * Π½ΠΈΠΆΠ΅, ΡΠ΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ (), ΠΏΠΎΡΡΠΎΠΌΡ Π²ΠΎ Π²ΡΠΎΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΊΠΎΠ±ΠΊΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡ.
Π₯ΠΎΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ ΡΠ΅Π΄ΠΊΠΎ, Π²ΡΠ΅ ΠΆΠ΅ Π²Π°ΠΆΠ½ΠΎ Π·Π½Π°ΡΡ, ΠΊΠ°ΠΊ ΠΈΡ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, Π° Π΅ΡΠ»ΠΈ ΠΏΠΎΡΡΠ΅Π±ΡΠ΅ΡΡΡ, ΠΈ ΠΊΠ°ΠΊ ΠΈΡ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ. Π£ΠΊΠ°ΠΆΠ΅ΠΌ Ρ ΠΎΡΠΎΡΠΈΠΉ ΡΠΏΠΎΡΠΎΠ±: ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΈΠ½ΡΠ΅Π·ΠΈΡΠΎΠ²Π°ΡΡ, Π΄Π²ΠΈΠ³Π°ΡΡΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌΠΈ ΡΠ°Π³Π°ΠΌΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ typedef, ΡΡΠΎΡ ΡΠΏΠΎΡΠΎΠ± ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ Π² ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ 6.7. Π Π½Π°ΡΡΠΎΡΡΠ΅ΠΌ ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π΄Π²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΡ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ Π‘ΠΈ-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΈΠΌ ΡΠ»ΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ, ΠΌΡ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΠΌ ΠΈΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ. Π‘Π»ΠΎΠ²Π΅ΡΠ½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΡΠΈΡΠ°Π΅ΡΡΡ ΡΠ»Π΅Π²Π° Π½Π°ΠΏΡΠ°Π²ΠΎ.
ΠΠ΅ΡΠ²Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, dcl, - Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½Π°Ρ. ΠΠ½Π° ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅Ρ Π‘ΠΈ-ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠ»ΠΎΠ²Π΅ΡΠ½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΊ, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ :
char **argv
argv: ΡΠΊΠ°Π·. Π½Π° ΡΠΊΠ°Π·. Π½Π° char
int (*daytab)[13]
daytab: ΡΠΊΠ°Π·. Π½Π° ΠΌΠ°ΡΡΠΈΠ²[13] ΠΈΠ· int
int (*daytab)[13]
daytab: ΠΌΠ°ΡΡΠΈΠ²[13] ΠΈΠ· ΡΠΊΠ°Π·. Π½Π° int
void *comp()
comp: ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ. ΡΠΊΠ°Π·. Π½Π° void
void (*comp)()
comp: ΡΠΊΠ°Π·. Π½Π° ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ. void
char (*(*x())[])()
x: ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ. ΡΠΊΠ°Π·. Π½Π° ΠΌΠ°ΡΡΠΈΠ²[] ΠΈΠ· ΡΠΊΠ°Π·. Π½Π° ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ. char
char(*(*x[3])())[5]
x: ΠΌΠ°ΡΡΠΈΠ²[3] ΠΈΠ· ΡΠΊΠ°Π·. Π½Π° ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ. ΡΠΊΠ°Π·. Π½Π° ΠΌΠ°ΡΡΠΈΠ²[5] ΠΈΠ· char
Π€ΡΠ½ΠΊΡΠΈΡ dcl Π² ΡΠ²ΠΎΠ΅ΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ, ΡΠΏΠ΅ΡΠΈΡΠΈΡΠΈΡΡΡΡΡΡ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ. ΠΡΠ° Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ° ΡΡΡΠΎΠ³ΠΎ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π° Π² ΠΏΠ°ΡΠ°Π³ΡΠ°ΡΠ΅ 8.5 ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ A, Π° Π² ΡΠΏΡΠΎΡΠ΅Π½Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ Π·Π°ΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ°ΠΊ:
ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ: Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠ΅ * ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ: ΠΈΠΌΡ
(ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ)
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ()
ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ [Π½Π΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ]
ΠΠΎΠ²ΠΎΡΡ ΠΏΡΠΎΡΡΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ, ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ, ΠΏΠ΅ΡΠ΅Π΄ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΡΠΎΡΡΡ * (Ρ. Π΅. ΠΎΠ΄Π½Π° ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π·Π²Π΅Π·Π΄ΠΎΡΠ΅ΠΊ), Π³Π΄Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ- ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ Π΅ΡΡΡ ΠΈΠΌΡ, ΠΈΠ»ΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ Π² ΡΠΊΠΎΠ±ΠΊΠ°Ρ , ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠ°ΡΠΎΠΉ ΡΠΊΠΎΠ±ΠΎΠΊ, ΠΈΠ»ΠΈ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΠΏΠ°ΡΠΎΠΉ ΠΊΠ²Π°Π΄ΡΠ°ΡΠ½ΡΡ ΡΠΊΠΎΠ±ΠΎΠΊ, Π²Π½ΡΡΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠΌΠ΅ΡΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ.
ΠΡΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π»Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ° ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠΉ. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ°ΠΊΠΎΠΉ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ:
(*pfa[])()
ΠΠΌΡ pfa Π±ΡΠ΄Π΅Ρ ΠΊΠ»Π°ΡΡΠΈΡΠΈΡΠΈΡΠΎΠ²Π°Π½ΠΎ ΠΊΠ°ΠΊ ΠΈΠΌΡ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ- ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ. ΠΠ°ΡΠ΅ΠΌ pfa[] Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π½ΠΎ ΠΊΠ°ΠΊ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ, Π° *pfa[] - ΠΊΠ°ΠΊ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ ΠΈ, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, (*pfa[]) Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ. ΠΠ°Π»Π΅Π΅, (*pfa[])() Π΅ΡΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ ΠΈ, ΡΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ. ΠΡΠΎΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΡΠ°Π·Π±ΠΎΡΠ°, ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠΌ Π½Π° ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΡΡΠ°Π½ΠΈΡΠ΅ (Π³Π΄Π΅ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ-ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΠΎΡΠΊΠΎ, Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΎΠ±ΡΡΠ².-ΠΎΠ±ΡΡΠ².).
Π‘Π΅ΡΠ΄ΡΠ΅Π²ΠΈΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΠΉ dcl ΠΈ dirdcl, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΡΠ°Π·Π±ΠΎΡ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ ΡΠΎΠ³Π»Π°ΡΠ½ΠΎ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΉ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ΅. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ, ΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ Π΄ΡΡΠ³ ΠΊ Π΄ΡΡΠ³Ρ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ, ΠΏΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°ΡΠΏΠΎΠ·Π½Π°Π²Π°Π½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΡ. ΠΠ΅ΡΠΎΠ΄, ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΠΉ Π² ΠΎΠ±ΡΡΠΆΠ΄Π°Π΅ΠΌΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π΄Π»Ρ Π³ΡΠ°ΠΌΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ ΡΠ°Π·Π±ΠΎΡΠ°, Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΌ ΡΠΏΡΡΠΊΠΎΠΌ.
/* dcl: ΡΠ°Π·Π±ΠΎΡ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ */
void dcl(void)
{
int ns;
for (ns = 0, gettoken() == '*';) /* ΠΏΠΎΠ΄ΡΡΠ΅Ρ Π·Π²Π΅Π·Π΄ΠΎΡΠ΅ΠΊ */
ns++;
dirdcl();
while(ns- βΊ 0)
strcat(out, "ΡΠΊΠ°Π·. Π½Π°");
}
/* dirdcl: ΡΠ°Π·Π±ΠΎΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ±ΡΡΠ²ΠΈΡΠ΅Π»Ρ */
void dirdcl(void)
{
int type;
if (tokentype == '(') {
dcl();
if (tokentype != ')')
printf("oΡΠΈΠ±ΠΊa: ΠΏΡΠΎΠΏΡΡΠ΅Π½Π°)\n");
} else if (tokentype == NAME) /* ΠΈΠΌΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ */
strcpy(name, token);
else
printf("ΠΎΡΠΈΠ±ΠΊΠ°: Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ name ΠΈΠ»ΠΈ (dcl)\n");
while((type = gettoken()) == PARENS || type == BRACKETS)
if (type == PARENS)
strcat(out, "ΡΡΠ½ΠΊΡ. Π²ΠΎΠ·Π²Ρ.");
else {
strcat(out, " ΠΌΠ°ΡΡΠΈΠ²");
strcat(out, token);
strcat(out, " ΠΈΠ·");
}
}
ΠΡΠΈΠ²Π΅Π΄Π΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ»ΡΠΆΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ»Π»ΡΡΡΡΠ°ΡΠΈΠ²Π½ΡΠΌ ΡΠ΅Π»ΡΠΌ ΠΈ Π½Π΅ Π²ΠΏΠΎΠ»Π½Π΅ Π½Π°Π΄Π΅ΠΆΠ½Ρ. Π§ΡΠΎ ΠΊΠ°ΡΠ°Π΅ΡΡΡ dcl, ΡΠΎ Π΅Π΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Ρ. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Ρ ΠΏΡΠΎΡΡΡΠΌΠΈ ΡΠΈΠΏΠ°ΠΌΠΈ Π²ΡΠΎΠ΄Π΅ char ΠΈ int ΠΈ Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Ρ ΡΠΈΠΏΠ°ΠΌΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² Π² ΡΡΠ½ΠΊΡΠΈΡΡ ΠΈ Ρ ΠΊΠ²Π°Π»ΠΈΡΠΈΠΊΠ°ΡΠΎΡΠ°ΠΌΠΈ Π²ΡΠΎΠ΄Π΅ const. ΠΠΈΡΠ½ΠΈΠ΅ ΠΏΡΠΎΠ±Π΅Π»Ρ Π΄Π»Ρ Π½Π΅Π΅ ΠΎΠΏΠ°ΡΠ½Ρ. ΠΠ½Π° Π½Π΅ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π½ΠΈΠΊΠ°ΠΊΠΈΡ ΠΌΠ΅Ρ ΠΏΠΎ Π²ΡΡ ΠΎΠ΄Ρ ΠΈΠ· ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΈ ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΡ ΡΠ°ΠΊΠΆΠ΅ Π΅ΠΉ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠΊΠ°Π·Π°Π½Ρ. Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΡΠΈΡ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠΎΠ² ΠΌΡ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π΄Π»Ρ ΡΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠΉ. ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΈ Π³Π»Π°Π²Π½Π°Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° main.
#include βΉstdio.hβΊ
#include βΉstring.hβΊ
#include βΉctype.hβΊ
#define MAXTOKEN 100
enum {NAME, PARENS, BRACKETS};
void dcl(void);
void dirdcl(void);
int gettoken(void);
int tokentype; /* ΡΠΈΠΏ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π»Π΅ΠΊΡΠ΅ΠΌΡ */
char token[MAXTOKEN]; /* ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π»Π΅ΠΊΡΠ΅ΠΌΡ */
char name[MAXTOKEN]; /* ΠΈΠΌΡ */
char datatype[MAXTOKEN]; /* ΡΠΈΠΏ = char, int ΠΈ Ρ.Π΄. */
char out[1000]; /* Π²ΡΠ΄Π°Π²Π°Π΅ΠΌΡΠΉ ΡΠ΅ΠΊΡΡ */