IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> задача:перевод чисел, прошу помощи в доработке
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 9
Пол: Мужской

Репутация: -  0  +


в общем есть у меня курсавая. Задача написать программку перевода чисел из разных систем счисления в другие(с основаниями от 2 до 16) с дробной частью. Задача не новая да и не особо сложноя. Сделал я ее и понес к преподу. Там-то и выяснилось, что сделана она через одно местно, так как программка переводит отдельно дробную, отдельно целую часть, а это неправильно. Так вот может кто-нибудь возьмется помочь и отредактирует так, как надо? или мож у кого готовая есть? а то мне сдавать в понедельник, а у самого завал с мейплом, не успеваю. Буду очень, очень благодарен.

вот исходный текст:

Program Radix1;
uses crt;
var
ch : char;
continue : boolean;
radix,i : integer;
number : real;
int,decimal : integer;
function enter_radix : integer;
begin
repeat
clrscr;
writeln('Input radix ');
readln(radix);
until (radix>=2) and (radix<=16);
enter_radix:= radix;
end;

function get_val(c:char) : integer;
begin
if (c>='0') and (c<='9')
then get_val := ord© - ord('0')
else if (c>='a') and (c<='f')
then get_val:= ord©-ord('a')+10
else if(c>='A') and (c<='F')
then get_val:= ord©-ord('A')+10
else
get_val:= - 10000;
end;

function in_radix(radix: integer; c: char): boolean;
Var
x : integer;
Begin
x:= get_val©;
if(radix<=abs(x)) then in_radix:= false
else in_radix:= true;
end;

function get_char(x : integer) : char;
begin
if(x<10)then get_char:= chr(x+ord('0'))
else get_char:= chr(x-10+ord('A'));
end;

function enter_digit(radix : integer; Var int, decimal : integer) : boolean;
Var str : string[21];
z : char;
i,l : integer;
dot_flag : boolean;
begin
dot_flag:= false;
int:= 0;
decimal:= 0;
writeln('Input number with radix = ',radix);
readln(str);
l:=length(str);
writeln(int);
for i:= 1 to l do
begin
if(str[i]='.' ) then
begin
if dot_flag then
begin
enter_digit:=false;
exit;
end
else
dot_flag:= true;
end
else if in_radix (radix, str[i]) then
begin
if dot_flag then
begin
decimal:= decimal*radix+get_val(str[i]);
end
else
begin
int:= int*radix+get_val(str[i]);
end;
end
else
begin
enter_digit:= false;
exit;
end;
end;
enter_digit:= true;
end;

procedure print_number(radix : integer; num : integer);
Var c : char;
i,j : integer;
out : string[20];
q,r : integer;
begin
for i:=1 to 20 do out[i]:=' ';
repeat
q:=num div radix;
r:=num mod radix;
c:= get_char®;
out[i]:= c;
i:= i-1;
num:= q;
until num = 0;
i:= 1;
while(out[i]=' ') do i:=i+1;
for j:= i to 20 do write (out[j]);
end;

procedure startup_init;
Var
i,j : integer;
c : char;
begin
textmode (co80);
clrscr;
textcolor(0);
textbackground(10);
clrscr;
gotoxy (11,19);
for i:=11 to 70 do write (#219);
for i:=7 to 19 do
begin
gotoxy(71,i);
writeln(#219);
END;
window (10,6,70,17);
textbackground(blue);
textcolor(0);
clrscr;
window(10,6,70,21);
write(#218);
for i:=11 to 69 do write (#196);
write(#191);
for i:=2 to 12 do
begin
gotoxy(1,i);
write(#179);
gotoxy (61,i);
write(#179);
end;
write(#192);
gotoxy(2,13);
for i:=11 to 69 do write (#196);
write(#217);
window(12,7,68,12);
textcolor(lightgreen);
end;

begin
startup_init;
ch:='r';
while ch='r' do
begin
radix:=enter_radix;
repeat
clrscr;
continue:=enter_digit(radix,int,decimal);

until continue;
radix:=enter_radix;
clrscr;
writeln('Nuber in radix = ',radix);
print_number(radix,int);
if(decimal<>0) then
begin
write('.');
print_number(radix,decimal);
end;
gotoxy(1,4);

writeln('Press r to repeat');
writeln('and other kay to exit');
ch:=readkey;
end;
end.



Сообщение отредактировано: Kubus -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 5.09.2025 13:55
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name