steve NN Ответов: 1

Преобразование в базу на языке Си


Привет,

Я новичок в этой области. К сожалению я не понимаю третьей функции в этой программе я хочу знать что делать
for(--digit; digit >= 0; --digit )

и
baseDigits[nextDigit]
.

Спасибо.

Что я уже пробовал:

#include <stdio.h>
int convertedNumber[64];
long int numberToConvert;
int base;
int digit = 0;
void getNumberAndBase (void)

{
        printf ("Number to be converted? ");
        scanf ("%li", &numberToConvert); printf ("Base? "); scanf ("%i", &base);
        if ( base < 2 || base > 16 ) {
          printf ("Bad base - must be between 2 and 16\n"); base = 10; }
}
void convertNumber (void) {
        do { convertedNumber[digit] = numberToConvert % base;
             ++digit;
             numberToConvert /= base;
           }
              while ( numberToConvert != 0 );


}
void displayConvertedNumber (void) {
        const char baseDigits[16] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
        int nextDigit;
        printf ("Converted number = ");
        for (--digit; digit >= 0; --digit )
        {
          nextDigit = convertedNumber[digit];


          printf ("%c", baseDigits[nextDigit]);
        }
        printf ("\n");

}
int main (void) {
        void getNumberAndBase (void), convertNumber (void), displayConvertedNumber (void);
        getNumberAndBase ();
        convertNumber ();
        displayConvertedNumber ();
        return 0;
}

1 Ответов

Рейтинг:
7

OriginalGriff

Один for заявление состоит из четырех частей:

for (a ; b ; c )
   d;
Где:
a выполняется до начала цикла
c выполняется после выполнения цикла
b тестируется после выполнения c
d выполняется каждый раз, когда выполняется цикл.
В псевдокоде это выглядит так:

1) выполнить a
2) Если ( не b ) Гото (3)
2.1) выполнить d
2.2) выполнить c
2.3) Гото (2)
3) сделано.

Так что в вашем случае:

1) вычесть единицу из digit
2) если ( цифра < 0 ) выйти из цикла.
2.1) выполните следующие строки:
nextDigit = convertedNumber[digit];
printf ("%c", baseDigits[nextDigit]);
2.2) вычтите единицу из числа digit
2.3) повторите цикл до (2) и проверьте еще раз.

Другой фрагмент кода прост: baseDigits это массив, а ваш код
baseDigits[nextDigit]
извлекает элемент в позиции, заданной значением индекса в nextDigit - Итак, если индекс равен нулю, он выбирает первый символ "0", если он один, он выбирает "1", и так далее до четырнадцати "Е" и пятнадцати "F"


Вы написали этот код для своей домашней работы, поэтому вы должны действительно понять, что он делает...


steve NN

спасибо

OriginalGriff

Всегда пожалуйста!