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