Attachment '3.c'

Download

   1 #include <stdio.h>
   2 #include <stdlib.h>
   3 
   4 char *x=NULL; // мой массив (подлежит расширению по необходимости)
   5 int size_x=0; // текущая емкость массива
   6 int count_x=0; // занятая емкость массива (count <= size)
   7 int step_x=2;
   8 
   9 
  10 void append( char k )
  11 {
  12 
  13 
  14     // если в массиве не осталось пустого места
  15     // (в частности, в начале, когда массив вообще нулевой длины)
  16     if( size_x == 0)
  17     {
  18         x = malloc( 1 * sizeof(char));
  19         size_x = 1;
  20     }
  21     if( count_x == size_x )
  22     {
  23         /*
  24         // 8<----------8<----------------8<-------------------------------
  25         new_a = malloc( (size + step) * sizeof(int) );
  26         if( new_a == NULL )
  27         {
  28             return; // выходим и ничего не делаем.
  29             // собственно говоря, ничего другого в этой функции
  30             // и не поделаешь.
  31         }
  32 
  33         // переписываем заполненный фрагмент массива в новое,
  34         // увеличенное место памяти.
  35         for( j = 0; j < count; j ++ )
  36         {
  37             new_a[j] = a[j];
  38         }
  39         free(a);
  40         a = new_a; // текущий массив будет увеличенного размера
  41         // 8<----------8<----------------8<-------------------------------
  42         * */
  43 
  44         x = realloc( x, (size_x * step_x) * sizeof(char) );
  45         printf( " -- произведено увеличение емкости с %d до %d элементов\n",
  46                 size_x, size_x*step_x);
  47         size_x = size_x * step_x;
  48     }
  49 
  50     // в этой точке гарантируется, что в массиве есть свободное место, т.е.
  51     // count < size, и можно выполнить очередное присваивание в a[count].
  52 
  53     x[count_x] = k;
  54     count_x ++;
  55 
  56 }
  57 
  58 
  59 int main ()
  60 {
  61     int i;
  62     char c;
  63     int palindrome = 0; // является ли текст палиндромом
  64 
  65     // enter points
  66     scanf("%c", &c );
  67     while( ! (c=='.') )
  68     {
  69         if((c >= 'A') && (c<='Z')) // c -- заглавная буква
  70           c = c - 'A' + 'a'; // сконвертировать в одноименную строчную букву
  71         append(c);
  72         scanf("%c", &c );
  73     }
  74 
  75     palindrome = 1;
  76     /*
  77      *
  78      * 12345
  79      * .   . i = 0
  80      *  . .  i = 1
  81      *   .   i = 2 // можем не проверять
  82      *
  83      * 123456
  84      * .    . i = 0
  85      *  .  .  i = 1
  86      *   ..   i = 2 // должны проверить
  87      */
  88     for( i = 0; i < count_x/2; i++){
  89        if( x[i] != x[count_x-i-1] ) {
  90          palindrome = 0;
  91          break;
  92        }
  93     }
  94 
  95     // print result
  96     if(palindrome)
  97     {
  98         printf("yes\n");
  99     }
 100     else
 101     {
 102         printf("no\n");
 103     }
 104     return 0;
 105 }

Attached Files

To refer to attachments on a page, use attachment:filename, as shown below in the list of files. Do NOT use the URL of the [get] link, since this is subject to change and can break easily.

You are not allowed to attach a file to this page.