четверг, 12 апреля 2012 г.

дан текст. определить, является ли он правильной десятичной записью целого числа.

определимся что есть "правильная запись десятичного числа"


  1. "1234" - да
  2. "056" - нет - так принято записывать 8-ричные числа
  3. "abc123" - нет - тут не только цифры
  4. "123.45" - нет - есть запятая, а значит это дробное


думаю, для начала этого достаточно, хотя нужно было бы ещё проверять запись с + и -, а так же научный подход с мантиссой

итак что надо сделать?

1. определить что строка не начинается с "0"
2. определить что в ней только цифры (отсеем дробные и строки с буквами)

этого достаточно чтобы сказать, что это правильная запись десятичного числа

char * s = "тут наша строка";

if (s[0] != '0')
{
     for (int i=0; i < strlen(s); i++)
     {
          bool error = false;
          if (!isdigit(s[i]))
          {
                error = true;
                break;
          }

          if (!error)
          {
                cout << "это правильная запись десятичного числа" << endl;
          }
     }
}

как его увидеть?


Часто при работе с массивами нам нужно видеть их содержимое, поэтому я рекомендую иметь под рукой функцию, которая выводит его содержимое на экран

#define N 100

int a[N];

for (int i = 0; i < N; i++)
{
    cout << "a[" << i << "]=" << a[i] << endl;
}

где взять массив?

Часто решая типовые задачи с массивами, нам нужно постоянно вводить значения элементов. И это конечно напрягает, не говоря о том что мы тратим на это много времени. Поэтому я предлагаю использовать генератор случайных чисел для инициализации нашего массива.

#define N 100 //число элементов в массиве
#define M 10 //число больше которого не будет в нашем массиве

int a[N];

srand(time(0)); //инициализация генератора текущим временем, чтобы не было повторов

for (int i = 0; i < N; i++)
{
    a[i] = rand() % M;
}

найти номера первых двух рядом стоящих одинаковых элементов в массиве

  1. где взять массив?
  2. как его увидеть?
  3. собственно решение
нужно сравнить i-й элемент с i+1-м, если они равны - значит решение найдено

int a[N];

for (int i = 0; i < N-1; i++)
{
    if (a[i] == a[i+1])
    {
        cout << i << "-й и " << (i+1) << "-й элементы равны " << a[i] << endl;
        break;
    }
}