Описать массив, индексами которого являются буквы - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Как в С можно описать массив, индексами которого являются буквы (и строчные, и заглавные) латинского алфавита, а значениями могут быть только числа 0 и 1 и никакие другие? Оффтоп: предыдущую тему случайно создал не в том разделе.

Решение задачи: «Описать массив, индексами которого являются буквы»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
 
typedef unsigned long long int uint_64;
 
typedef enum
{
  a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, x, y, z,
  A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, X, Y, Z
} TIndex;
 
typedef struct TCustomArray TCustomArray;
 
struct TCustomArray
{
  uint_64 bits;  /* при индексации 0-49 (50 элементов) будем использовать 64 бита памяти (можно
                    конечно использовать блок в 7 байт, а не 8-ми байтное целое, но тогда логика
                    индексации будет несколько сложнее). Максимальное значение составит
                    0x0003FFFFFFFFFFFF */
  void (*SetAtIndex)(TCustomArray* const arrayPtr, const TIndex index, const unsigned char value);
  int (*GetAtIndex)(TCustomArray* const arrayPtr, const TIndex index);
};
 
void Set(TCustomArray* const arrayPtr, const TIndex index, const unsigned char value)
{
  if ((arrayPtr != NULL) && (index < Z))
  {
    if (value != 0)
    {
      arrayPtr->bits = arrayPtr->bits | (1i64 << index);
    }
    else
    {
      arrayPtr->bits = arrayPtr->bits & (~(1 << index));
    }
  }
}
 
int Get(TCustomArray* const arrayPtr, const TIndex index)
{
  int returnValue = 0;
 
  if ((arrayPtr != NULL) && (index < Z))
  {
    returnValue = (arrayPtr->bits >> index) & 1;
  }
 
  return returnValue;
}
 
void InitArray(TCustomArray* const arrayPtr)
{
  if (arrayPtr != NULL)
  {
    arrayPtr->bits = 0;
 
    arrayPtr->SetAtIndex = Set;
    arrayPtr->GetAtIndex = Get;
  }
}
 
 
int main(void)
{
  int i = a;
  int val = 0;
 
  TCustomArray array;
 
  InitArray(&array);
 
  for(i = a; i < Z + 1; i++)
  {
    val = rand() % 2;
 
    array.SetAtIndex(&array, (TIndex)i, val);
  }
 
  array.SetAtIndex(&array, a, 0);
  array.SetAtIndex(&array, A, 1);
 
  for(i = a; i < Z + 1; i++)
  {
    printf("[%d] : %d\n", i, array.GetAtIndex(&array, (TIndex)i));
  }
 
  return 0;
}

Объяснение кода листинга программы

  1. Включение необходимых заголовочных файлов: #include и #include .
  2. Объявление типа данных, используемого для представления индексов массива: typedef enum.
  3. Объявление структуры, представляющей пользовательский массив: struct TCustomArray.
  4. Определение методов для работы с массивом внутри структуры: void (SetAtIndex)(TCustomArray const arrayPtr, const TIndex index, const unsigned char value) и int (GetAtIndex)(TCustomArray const arrayPtr, const TIndex index).
  5. Реализация метода Set, отвечающего за установку значения по индексу.
  6. Реализация метода Get, отвечающего за получение значения по индексу.
  7. Реализация функции InitArray, отвечающей за инициализацию массива перед использованием.
  8. Реализация функции main, в которой создается экземпляр массива, заполняется случайными значениями, изменяется значение по индексам a и A, а затем выводятся все значения по индексам от a до Z.
  9. В функции main используется тип данных int для переменной i, которая перебирает все буквы от a до z и дополнительно точку a, а также переменная val, которая принимает случайное значение 0 или 1.
  10. Создается экземпляр массива TCustomArray с помощью оператора new.
  11. Вызывается функция InitArray для инициализации экземпляра массива.
  12. В цикле for перебираются все буквы от a до z и дополнительно точка a.
  13. Для каждой буквы вызывается метод Set, передавая в него указатель на массив, значение переменной val и индекс текущей буквы.
  14. Значение переменной val устанавливается равным 0 для буквы a и 1 для буквы A.
  15. В цикле for выводятся все значения массива по индексам от a до z.
  16. Значение переменной i выводится на экран с помощью функции printf.
  17. В конце функции main возвращается значение 0, что означает успешный конец работы программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.778 из 5
Похожие ответы