Массив заполняется с клавиатуры - 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); } }
Объяснение кода листинга программы
- Функция
Digit
принимает два аргумента:number
иi
. i
используется в циклеwhile
, который продолжается до тех пор, покаi
не станет равным 0.- В каждой итерации цикла
number
делится на 10. - Возвращаемое значение функции
Digit
- это остаток от деленияnumber
на 10. - В функции
main
объявлена переменнаяproceed
со значением 1. - Цикл
while
продолжается до тех пор, покаproceed
не станет равным 0. - В каждой итерации цикла массив
mass1
заполняется значениями, введенными с клавиатуры. - Значения, введенные с клавиатуры, преобразуются в числа и записываются в переменную
number
. - Если введено значение
-
, тоi
устанавливается равным 5 иproceed
устанавливается равным 0. - Если введено значение
=
, то на дисплей выводится соответствующий символ. - Если введено любое другое значение, то оно преобразуется в число и записывается в переменную
number
. - После заполнения массива
mass1
числами, каждое число из массива преобразуется в десятичное число и добавляется кnumber
. - После окончания ввода чисел с клавиатуры, на дисплей выводятся символы, соответствующие каждому числу, введенному с клавиатуры.
- Выполняется задержка в 3 секунды.
- После завершения работы программы, на дисплей выводится символ
1
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д