Массив заполняется с клавиатуры - C (СИ)

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

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

Есть массив с количеством элементов от 1 до 5. Индекс массива указывает на порядок. Как их сложить, чтобы получить число. Количество элементов заранее неизвестно. Например {1,2} должно получиться 12 или {1,4,5,6}- 1456
Часть кода, может быть, кто-то скажет, где есть ошибка. Вывод осуществляется неверный.
unsigned char Digit (unsigned int d, unsigned char m){
unsigned char i = 4, a;
 while(i){          // цикл по разрядам числа
   a = d%10;            // выделяем очередной разряд
   if(i-- == m) break;  // выделен заданный разряд - уходим
   d /= 10;         // уменьшаем число в 10 раз
 }
 return(a);
}
void main(void)
{
unsigned int mass1[];
unsigned int z=0;
unsigned char d,i,a=0,r,f=0;
LCD_init();
while (1)
    {
    d=0;
    z=0;
    d=Inter();                 //функция присваивает цифру, введенную с клавиатуры 
    for(i=0;i<1;i++)        //цикл поочередной записи d в массив 
      {
      if(d!='-')
        {
        mass1[a]=d;
        a++;                  //считаем кол-во элементов массива
        
        }
      else
        {
        break;
        }  
      }  
    
    if(d=='-')
    { 
    LCD_cmd(1,'-');     //вывод на ЖКИ индикатор 
    }
    if(d!='='|'-')
      {
       LCD_cmd(1,48+d); // вывод на ЖКИ индикатор введенных с клавиатуры цифр
      }
    
    if(d=='=')
     {
     LCD_cmd(1,'='); //вывод '='
     for(i=0;i<a;)    //цикл подсчета введенного числа 
       { 
        z=z+f;
        f=mass1[i]*pow(10,a);
        a--;
       }  

          for(i=0;i<6;i++)
           { 
                  { 
                   r=Digit(z,i); // функция возвращает значение i разряда
                   LCD_cmd(1,48+r);  //вывод значения i разряда 
                   if(i==5)
                     {
                     delay_ms(3000);
                     LCD_cmd(0,0x01); // очистка ЖКИ индикатора 
                     }
                   } 
            } 
     }
    d=0;
    z=0;
    f=0;
    }
}
написано для проверки правильности вывода, т.е ввожу число, а потом после равно пытаюсь его же вывести

Решение задачи: «Массив заполняется с клавиатуры»

textual
Листинг программы
unsigned char Digit (unsigned int number, unsigned char i) {
    while (i) 
        number /= 10;
    return number%=10;
}
 
void main (void) {
    unsigned char proceed = 1
    while(proceed) {
        unsigned int mass1[6] = {0};// ={0,0,0,0,0,0};
        unsigned char d, number=0;
        LCD_init();
        for (i=0; i<5; i++) {
            d = Inter();
            switch (d) {
                case '-':
                    i = 5;
                    proceed = 0;
                case '=':
                    LCD_cmd(1,d);
                    break;
                default :
                    mass1[i] = d;
                    LCD_cmd(1,d);
            }
        }
        for (i=0; mass1[i]; i++)
            number = number*10 + mass1[i];
 
        for (--i; i>=0; i--)
            LCD_cmd(1, '0'+ Digit(number, i));
        delay_ms(3000);
        LCD_cmd(0,0x01);
    }
}

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

  1. Функция Digit принимает два аргумента: number и i.
  2. i используется в цикле while, который продолжается до тех пор, пока i не станет равным 0.
  3. В каждой итерации цикла number делится на 10.
  4. Возвращаемое значение функции Digit - это остаток от деления number на 10.
  5. В функции main объявлена переменная proceed со значением 1.
  6. Цикл while продолжается до тех пор, пока proceed не станет равным 0.
  7. В каждой итерации цикла массив mass1 заполняется значениями, введенными с клавиатуры.
  8. Значения, введенные с клавиатуры, преобразуются в числа и записываются в переменную number.
  9. Если введено значение -, то i устанавливается равным 5 и proceed устанавливается равным 0.
  10. Если введено значение =, то на дисплей выводится соответствующий символ.
  11. Если введено любое другое значение, то оно преобразуется в число и записывается в переменную number.
  12. После заполнения массива mass1 числами, каждое число из массива преобразуется в десятичное число и добавляется к number.
  13. После окончания ввода чисел с клавиатуры, на дисплей выводятся символы, соответствующие каждому числу, введенному с клавиатуры.
  14. Выполняется задержка в 3 секунды.
  15. После завершения работы программы, на дисплей выводится символ 1.

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


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

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

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