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

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ Π‘ΠΈ - руководство для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 88

Автор M. УЭИВ

     Π€ΡƒΠ½ΠΊΡ†ΠΈΡ atof( ) выполняСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ дСйствия для чисСл с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. Она Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Ρ‚ΠΈΠΏ double, поэтому Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ описана ΠΊΠ°ΠΊ double Π² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅ΠΉ Π΅Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅.

     ΠŸΡ€ΠΎΡΡ‚Ρ‹Π΅ вСрсии atof( ) Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ числа Π²ΠΈΠ΄Π° 10.2, 46 ΠΈ - 124.26. Π‘ΠΎΠ»Π΅Π΅ ΠΌΠΎΡ‰Π½Ρ‹Π΅ вСрсии ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠΊΡΠΏΠΎΠ½Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΡƒΡŽ запись, Ρ‚. Π΅. числа, ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ 1.25Π• - 13.

     Π’Π°ΡˆΠ° систСма ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰ΠΈΠ΅ Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½ΠΎΠΌ Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ. Ѐункция itoa( ) Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ Ρ†Π΅Π»ΠΎΠ΅ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку, Π° функция ftoa( ) ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡŒΠ½ΡƒΡŽ строку.

Π’Π«Π₯ΠžΠ”: exit( )

     Π€ΡƒΠ½ΠΊΡ†ΠΈΡ exit( ) даст Π²Π°ΠΌ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ "ΠΏΠΎΠΊΠΈΠ½ΡƒΡ‚ΡŒ" ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ. Она часто ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для прСкращСния Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈ появлСнии ошибки. Если ΠΊ exit( ) ΠΎΠ±Ρ€Π°Ρ‚ΠΈΠ»ΠΈΡΡŒ ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π²Ρ‹Π·Π²Π°Π½Π½ΠΎΠΉ Π³Π»Π°Π²Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Ρ‚ΠΎ ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‰Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ вся ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ эта функция. Π’ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½ΠΎΠΌ Π²Ρ‹ΡˆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ с Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ atoi( ) использованиС exit( ) позволяСт Π½Π°ΠΌ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° else для ΠΎΠ±Ρ…ΠΎΠ΄Π° остатка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

     ΠŸΡ€ΠΈΡΡ‚ная ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ exit( ) Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° Π·Π°ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ Π»ΡŽΠ±Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ fopen( ). Π­Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ наш Π²Ρ‹Ρ…ΠΎΠ΄ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌ.

     ΠΡ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠΌ exit( ) являСтся Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π° ошибки. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… систСмах ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒΡΡ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅, Ссли исходная ΠΏΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΠ»Π° Ρ€Π°Π±ΠΎΡ‚Ρƒ. БущСствуСт соглашСниС, Ρ‡Ρ‚ΠΎ 0 ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ любоС Π΄Ρ€ΡƒΠ³ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ ΠΎΠ± ошибкС.

Π•ΡΡ‚ΡŒ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° Ρ‚Π΅ΠΌΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΎΠ±ΡΡƒΠ΄ΠΈΡ‚ΡŒ.


Π ΠΠ‘ΠŸΠ Π•Π”Π•Π›Π•ΠΠ˜Π• ПАМЯВИ: malloc( ) И са11ос( )

     Π’Π°ΡˆΠ° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ достаточный объСм памяти для запоминания ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. НСкоторыС ΠΈΠ· этих ячССк памяти Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ автоматичСски. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ

char place[ ] = "Π—Π°Π»ΠΈΠ² Π‘Π²ΠΈΠ½ΠΎΠΉ ΠΏΠ΅Ρ‡Π΅Π½ΠΊΠΈ";

ΠΈ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ°ΠΌΡΡ‚ΡŒ, достаточная для запоминания этой строки.

Или ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π±Ρ‹Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ ΠΈ Π·Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹ΠΉ объСм памяти:

int plates[100];

Π­Ρ‚ΠΎ описаниС выдСляСт 100 ячССк памяти, каТдая ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для запоминания Ρ†Π΅Π»ΠΎΠ³ΠΎ значСния.

     Π―Π·Ρ‹ΠΊ Π‘ΠΈ Π½Π΅ останавливаСтся Π½Π° этом. Он позволяСт Π²Π°ΠΌ Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π²ΠΎ врСмя Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π²Ρ‹ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΈ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ Π·Π°Ρ€Π°Π½Π΅Π΅, сколько Π΄Π°Π½Π½Ρ‹Ρ… Π²Π°ΠΌ придСтся Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ. МоТно Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½Ρ‹ΠΉ Π²Π°ΠΌ (ΠΊΠ°ΠΊ Π²Ρ‹ считаСтС) объСм памяти, Π° Π·Π°Ρ‚Π΅ΠΌ, Ссли понадобится, ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ Π΅Ρ‰Π΅. На рис. 15.5 Π΄Π°Π½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ функция malloc( ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π½ΠΎ это. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ такая ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° примСняСт ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.

/* добавляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ */

#include <sldio.h>

#define STOP "  "   /* сигнал прСкращСния Π²Π²ΠΎΠ΄Π° */

#define BLOCK 100 /* Π±Π°ΠΉΡ‚Ρ‹ памяти */

#define LIM 40     /* ΠΏΡ€Π΅Π΄Π΅Π»ΡŒΠ½Π°Ρ Π΄Π»ΠΈΠ½Π° Π²Π²ΠΎΠ΄ΠΈΠΌΠΎΠΉ строки */

#define MAX 50     /* максимальноС число Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… строк */

#define DRAMA 20000 /* большая Π·Π°Π΄Π΅Ρ€ΠΆΠΊΠ° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ */

main( )

{

char store[BLOCK]; /* исходный Π±Π»ΠΎΠΊ памяти */

char symph[LIM]; /* ΠΏΡ€ΠΈΠ΅ΠΌΠ½ΠΈΠΊ Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… строк */

char *end;  /* ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΊΠΎΠ½Π΅Ρ† памяти */

char *starts[MAX]; /* ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° Π½Π°Ρ‡Π°Π»Π° строк */

int index = 0; /* количСство Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… строк */

int count;  /* счСтчик */

char *malloc( ); /* Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ памяти */

starts[0] = store;

end = starts[0] + BLOCK - 1;

puts(" НазовитС нСсколько симфоничСских оркСстром.");

puts(" Π’Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ: Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ [Π²Π²ΠΎΠ΄] Π² Π½Π°Ρ‡Π°Π»Π΅");

puts(" строки для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ вашСго списка. Π₯ΠΎΡ€ΠΎΡˆΠΎ, я Π³ΠΎΡ‚ΠΎΠ²Π°." );

while(strcmp(fgets(symph, LIM, stdin), STOP) != 0 && index < MAX)

{ if(strlen(symph) > end - starts[index])

{ /* дСйствия ΠΏΡ€ΠΈ нСдостаткС памяти для запоминания Π²Π²ΠΎΠ΄ΠΈΠΌΡ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…*/

puts(" ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ сСкунду. Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π½Π°ΠΉΡ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.");

starts[index] = malloc(BLOCK);

end = starts[index] + BLOCK - 1;

for(count = 0; count < DRAMA; count++);

puts(" Нашла Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ!" );  }

strcpy (starts [index], symph);

starts[index + 1] = starts[index] + strlen(symph) + 1;

if(++index < MAX)

    printf("Π­Ρ‚o %d. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.\n", index); }

puts(" Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°:");

for(count = 0; count < index; count ++)

    puts(starts[count]);

}

РИБ. 15.5. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‰Π°Ρ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎ Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΡŽ.

Π’ΠΎΡ‚ ΠΎΠ±Ρ€Π°Π·Π΅Ρ† Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹:

НазовитС нСсколько симфоничСских оркСстров оркСстров.

Π’Π²ΠΎΠ΄ΠΈΡ‚Π΅ ΠΈΡ… ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΌΡƒ;  Π½Π°ΠΆΠΌΠΈΡ‚Π΅ ΠΊΠ»Π°Π²ΠΈΡˆΡƒ [Π²Π²ΠΎΠ΄] Π² Π½Π°Ρ‡Π°Π»Π΅

строки для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ нашСго списка. Π₯ΠΎΡ€ΠΎΡˆΠΎ, я Π³ΠΎΡ‚ΠΎΠ²Π°.

Π‘Π°Π½-франциский симфоничСский.

Π­Ρ‚ΠΎ 1. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Чикагский симфоничСский

Π­Ρ‚ΠΎ 2. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

БСрлинский филармоничСский

Π­Ρ‚ΠΎ 3. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Московский ΠΊΠ°ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ

Π­Ρ‚ΠΎ 4. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. Лондонский симфоничСский

Π­Ρ‚ΠΎ 5. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅. ВСнский филармоничСский

ΠŸΠΎΠ΄ΠΎΠΆΠ΄ΠΈΡ‚Π΅ сСкунду.  Π― ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΡŽ Π½Π°ΠΉΡ‚ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Нашла нСмного!

Π­Ρ‚ΠΎ 6. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

ΠŸΠΈΡ‚Ρ‚ΡΠ±ΡƒΡ€Π³ΡΠΊΠΈΠΉ симфоничСский

Π­Ρ‚ΠΎ 7. ΠŸΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΠΉΡ‚Π΅, Ссли Ρ…ΠΎΡ‚ΠΈΡ‚Π΅.

Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π²ΠΎΡ‚ Ρ‡Ρ‚ΠΎ я ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π°:

Π‘Π°Π½-Ρ„Ρ€Π°Π½Ρ†ΠΈΠ·ΠΊΠΈΠΉ симфоничСский

Чикагский симфоничСский

БСрлинский филармоничСский

Московский ΠΊΠ°ΠΌΠ΅Ρ€Π½Ρ‹ΠΉ

Лондонский симфоничСский

ВСнский филармоничСский

ΠŸΠΈΡ‚Ρ‚ΡΠ±ΡƒΡ€Π³ΡΠΊΠΈΠΉ симфоничСский

     Π‘Π½Π°Ρ‡Π°Π»Π° Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ функция malloc( ). Она Π±Π΅Ρ€Π΅Ρ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π² Π²ΠΈΠ΄Π΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ Π±Π΅Π· Π·Π½Π°ΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ прСдставляСт количСство Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹Ρ… Π±Π°ΠΉΡ‚ΠΎΠ² памяти. Π’Π°ΠΊ, malloc(BLOCK) Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ 100 Π±Π°ΠΉΡ‚. Ѐункция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ char Π² Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти. ΠœΡ‹ использовали описаниС

char *malloc( );

Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅Π΄ΠΈΡ‚ΡŒ компилятор, Ρ‡Ρ‚ΠΎ malloc( ) Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ char. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΌΡ‹ присвоили Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого указатСля элСмСнту массива starts[index] ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°

starts[index] = malloc(BLOCK);

     Π₯ΠΎΡ€ΠΎΡˆΠΎ, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π·Π°ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΠΈΠΉΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ всС исходныС строки подряд Π² большом массивС store. ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ starts[0] для ссылки Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΠ΅Ρ€Π²ΠΎΠΉ строки, starts[l] - Π²Ρ‚ΠΎΡ€ΠΎΠΉ строки ΠΈ Ρ‚. Π΄. На ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠΌ этапС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Π²ΠΎΠ΄ΠΈΡ‚ строку Π² массив symph. ΠœΡ‹ использовали fgets( ) вмСсто gets( ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Π²Ρ…ΠΎΠ΄Π½ΡƒΡŽ строку Π΄Π»ΠΈΠ½ΠΎΠΉ массива symph.


РИБ. 15.6. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ строки symph, записанныС Π² массив store.

     ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ symph Π² store, ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ, достаточно Π»ΠΈ для Π½Π΅Π΅ ΠΎΡΡ‚Π°Π²ΡˆΠ΅Π³ΠΎΡΡ мСста. Π£ΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ end ссылаСтся Π½Π° ΠΊΠΎΠ½Π΅Ρ† памяти, Π° Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ starts[index] ссылаСтся Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ нСиспользованной памяти. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½ΠΈΡ†Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя указатСлями с Π΄Π»ΠΈΠ½ΠΎΠΉ symph ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, достаточно Π»ΠΈ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ памяти.

     Π•сли мСста нСдостаточно, Π²Ρ‹Π·Ρ‹Π²Π°Π΅ΠΌ malloc( ), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒ. ΠœΡ‹ устанавливаСм starts[index] Π½Π° Π½Π°Ρ‡Π°Π»ΠΎ Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° памяти, a end - Π½Π° ΠΊΠΎΠ½Π΅Ρ† Π½ΠΎΠ²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ°. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ нас Π½Π΅Ρ‚ ΠΈΠΌΠ΅Π½ΠΈ этой Π½ΠΎΠ²ΠΎΠΉ памяти. Она Π½Π΅ являСтся, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ΠΌ store. Π£ нас Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ обозначСния ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ, ΡΡΡ‹Π»Π°ΡŽΡ‰ΠΈΡ…ΡΡ Π½Π° Π½ΠΎΠ²ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ памяти.

     ΠšΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚, Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Π½ΠΎΠ²ΡƒΡŽ строку ссылаСтся элСмСнт массива ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ starts. НСкоторыС строки находятся Π² store, Π΄Ρ€ΡƒΠ³ΠΈΠ΅ - Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… Π½ΠΎΠ²Ρ‹Ρ… областях памяти.

Но ΠΏΠΎΠΊΠ° Ρƒ нас Π΅ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ со строками, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π°ΠΌ Ρ‡Π°ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰Π°Ρ Π²Ρ‹Π²ΠΎΠ΄ Π½Π° ΠΏΠ΅Ρ‡Π°Ρ‚ΡŒ.

     Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ mΠ°llос( ). Но ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ Ρ‚ΠΈΠΏΠ° int, Π° Π½Π΅ char. ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΈ здСсь ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ mΠ°llос( ). Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это дСлаСтся:

char *malloc( ); /* ΠΏΠΎ-ΠΏΡ€Π΅ΠΆΠ½Π΅ΠΌΡƒ описываСм ΠΊΠ°ΠΊ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° char */

int *newmem;

newmem = (int *) malloc(l00); /* ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ привСдСния Ρ‚ΠΈΠΏΠ° */

Π‘Π½ΠΎΠ²Π° трСбуСтся 100 Π±Π°ΠΉΡ‚. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ привСдСния Ρ‚ΠΈΠΏΠ° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Ρ‚ΠΈΠΏ char, Π² ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Ρ‚ΠΈΠΏ int. Если, ΠΊΠ°ΠΊ Π² нашСй систСмС, int Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ‚ Π΄Π²Π° Π±Π°ΠΉΡ‚Π° памяти, это Π·Π½Π°Ρ‡ΠΈΡ‚, Ρ‡Ρ‚ΠΎ newmem + 1 Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ²Π΅Π»ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° Π΄Π²Π° Π±Π°ΠΉΡ‚Π°, Ρ‚. Π΅. ΠΏΠ΅Ρ€Π΅Π΄Π²ΠΈΠ³Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΊ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌΡƒ Ρ†Π΅Π»ΠΎΠΌΡƒ. Π­Ρ‚ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ 100 Π±Π°ΠΉΡ‚ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для запоминания 50 Ρ†Π΅Π»Ρ‹Ρ… чисСл.