Назад | Начало урока | Вперед
Содержание

Глава 3 стр 29

Функция filter() умеет конвертировать

Теперь, когда мы считали префикс и получили все необходимые переменные,
можно вывести рисунок на экран.

Для преобразования и вывода десятичного числа в 16-ричное число
напишем функцию. В параметры ей передадим 10-чное число и две
символьных переменных. Затем число препарируем и выводим при помощи
двух символьных переменных как 16-ричное.

Функция не смотря на свой размер достаточно простая для понимания:


void filter(int chislo, char &first_val, char &second_val){
int rez_h = 0;
int rez_l = 0;
rez_h = chislo/16;
if(rez_h>9){
switch(rez_h){
case 10 :
first_val = 'A'; break;
case 11 :
first_val = 'B'; break;
case 12 :
first_val = 'C'; break;
case 13 :
first_val = 'D'; break;
case 14 :
first_val = 'E'; break;
case 15 :
first_val = 'F'; break;
default:
break;
}
}
else{
switch(rez_h){
case 0 :
first_val = '0'; break;
case 1 :
first_val = '1'; break;
case 2 :
first_val = '2'; break;
case 3 :
first_val = '3'; break;
case 4 :
first_val = '4'; break;
case 5 :
first_val = '5'; break;
case 6 :
first_val = '6'; break;
case 7 :
first_val = '7'; break;
case 8 :
first_val = '8'; break;
case 9 :
first_val = '9'; break;
default:
break;
}
}
rez_l = chislo%16;
if(rez_l>9){
switch(rez_l){
case 10 :
second_val = 'A'; break;
case 11 :
second_val = 'B'; break;
case 12 :
second_val = 'C'; break;
case 13 :
second_val = 'D'; break;
case 14 :
second_val = 'E'; break;
case 15 :
second_val = 'F'; break;
default:
break;
}
}
else{
switch(rez_l){
case 0 :
second_val = '0'; break;
case 1 :
second_val = '1'; break;
case 2 :
second_val = '2'; break;
case 3 :
second_val = '3'; break;
case 4 :
second_val = '4'; break;
case 5 :
second_val = '5'; break;
case 6 :
second_val = '6'; break;
case 7 :
second_val = '7'; break;
case 8 :
second_val = '8'; break;
case 9 :
second_val = '9'; break;
default:
break;
}
}
}

Вызывается функция следующим образом:

int k = 0;
for(int i=54;i < size_file;i++){

temp = (int)buf[i];
if(temp<0)
temp = 256+temp;
filter(temp,first_ch,second_ch);
to1 << first_ch << second_ch ;
k++;
if(k==dlina_str){//перевод строки
k=0;
to1<< " " << endl ;
}
}

Сначала в temp десятичное значение из buf. Затем, если число отрицательное,
преобразуем его в положительное. Затем, при помощи вызова функции filter()
преобразуем это значение в 16-ричный вид и в таком виде выводим в файл.
Периодически осуществляем перевод строки.

Рисунок вывелся правильно.
Изумительно! И программу эту мы написали намного быстрее чем на ассемблер.

Полный код данной программы - на следующей странице.


Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz