перевод чисел по системам исчисления
|
|
я смотрю - ви енштейни такие умние (замечания с предадущих тем ) ! так ответьте на мой вопрос ! от програма (недоделана) но переводит с 2-16 систем в 10 . почему она переводит НЕПРАВЕЛЬНО числа каторие большее 3-х значних !!!!!!!!
program sistem; uses dos,crt; var p,qq,pp,m:string; g,x,l : real; kol,i,s,k,r,z, w, n: longint; cod : integer;
{==================================} procedure priznachenie_x; begin if m = 'a'then x:=10 else if m = 'b'then x:=11 else if m = 'c'then x:=12 else if m = 'd'then x:=13 else if m = 'e'then x:=14 else if m = 'f'then x:=15 else val(m,x,cod); {перевод в числове значеня} end; {==================================} procedure pr_v_10; begin writeln('введите число в ',w,'-ричной системе'); readln(p); kol:=0; z:=0;{степень числа} l:=0;{число на виходе} for i:=1 to length(p) do kol:=kol+1;{нахождение количества елементов} k:=kol-1; pp:=copy(p,kol,1); {копирование последнево елемента} while z < k do begin qq:=copy(p,kol-1,1); {копирование последнево елемента} delete(p,kol-1,1); {удаление послю елемента} m:=qq; priznachenie_x; {перевод в числове значеня}
r:=w; for i:=1 to z do r:=r*w; {вознисение r в степень z} g:=x*r; l:=l+g;
kol:=kol-1; z:=z+1; end; m:=pp; priznachenie_x; {перевод в числове значеня} l:=l+x; writeln('число в ',s,'-ой системе =',l:9:0); end; {==================================} begin clrscr; writeln('ПРОГРАМА ДЛЯ ПЕРЕВОДА СИСТЕМ ИСЧИСЛЕНИЯ (16, 10, 8, 2 )'); writeln('с какой системи будет осущиствлен перевод ? (16, 10, 8, 2 ) '); readln(w); writeln('в какую системи будет осущиствлен перевод ? '); readln(s); if s=10 then pr_v_10 else writeln('ошибка ввода !'); readln; end.
Добавлено (12.11.12, 22:36) --------------------------------------------- все нашов !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! можете не стараця !!!
№ 1 | Автор: babun9999 |
2012-11-12, 22:36 | Изменено: babun9999 - Пн, 2012-11-12, 22:37
--------->
|
|
№ 1 | Автор: babun9999 |
2012-11-12, 22:36 | Изменено: babun9999 - Пн, 2012-11-12, 22:37
--------->
|
|
|
Quote (babun9999) можете не стараця !!! та никто и не пытался))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
от и готова програма ! переводит с (от 2 до 16 ) систем в ( от 2 до 16 ) системи ! гарантия верховного менка !
program sistem; uses dos,crt; var p,qq,pp,m,mm,h:string; g,x,l : real; kol,i,s,k,r,z, w, n: longint; cod,f : integer;
{==================================} procedure priznachenie_x; begin if m = 'a'then x:=10 else if m = 'b'then x:=11 else if m = 'c'then x:=12 else if m = 'd'then x:=13 else if m = 'e'then x:=14 else if m = 'f'then x:=15 else if m > 'f' then oshibka:=1 else val(m,x,cod); {перевод в числове значеня}
if oshibka =1 then begin writeln('ОШИБКА ВВОДА (допистимие символи - 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f )'); readln; halt; end;
end; {==================================} procedure pr_v_10; begin writeln('введите число в ',w,'-ричной системе'); readln(p); kol:=0; z:=0;{степень числа} l:=0;{число на виходе} for i:=1 to length(p) do kol:=kol+1;{нахождение количества елементов} k:=kol-1; pp:=copy(p,kol,1); {копирование последнево елемента} while z < k do begin qq:=copy(p,kol-1,1); {копирование последнево елемента} delete(p,kol-1,1); {удаление послю елемента} m:=qq; priznachenie_x; {перевод в числове значеня}
r:=w; for i:=1 to z do r:=r*w; {вознисение r в степень z} g:=x*r; l:=l+g;
kol:=kol-1; z:=z+1; end; m:=pp; priznachenie_x; {перевод в числове значеня} l:=l+x; end; {==================================} procedure pr_v_16; var p,q,h : string; i,n,g,f : integer; begin
str(l:9:0,p) ; val(p,g,cod);
q:=''; h:=''; while g > (s-1) do begin n:= g div s; f:= g mod s ;
case f of 10 : h := 'a'; 11 : h := 'b' ; 12 : h := 'c'; 13 : h := 'd'; 14 : h := 'e'; 15 : h := 'f' else str(f,h); end; q:=q+h; g:=n; end;
if g <> 0 then begin case g of 10 : h := 'a'; 11 : h := 'b' ; 12 : h := 'c'; 13 : h := 'd'; 14 : h := 'e'; 15 : h := 'f' else str(g,h); end; q:=q+h; end;
qq:=''; for i:=length(q) downto 1 do qq:=qq+q[i];
writeln('число число в ' ,s,' системе =',qq); end; {==================================}
begin clrscr; writeln('ПРОГРАМА ДЛЯ ПЕРЕВОДА СИСТЕМ ИСЧИСЛЕНИЯ '); writeln('с какой системи будет осущиствлен перевод ? ( 2-16 ) '); readln(w); writeln('в какую системи будет осущиствлен перевод ? ( 2 - 16 ) '); readln(s); if s=10 then begin pr_v_10; writeln('число в ',s,'-ой системе =',l:9:0); end
else if s < 17 then begin pr_v_10; pr_v_16 ; end
else writeln('ошибка ввода !'); readln; end.
№ 3 | Автор: babun9999 |
2012-11-14, 18:17 | Изменено: babun9999 - Чт, 2012-11-15, 17:07
--------->
|
|
|
А как-же "защита от дурака"?))
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) А как-же "защита от дурака"?))
переводить можна в 2 - 16 (2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) - может комуто понадобится - больше нильзя
а нащот ввода тожесамое токо без ограничения - хочет - пусть вводит систему больше 16 - символов то всеравно 16 ! - такшо ответ будит правельним
№ 5 | Автор: babun9999 |
2012-11-14, 20:38
--------->
|
|
|
а если я вместо цифры букву введу?)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
Quote (Berestovskiy) а если я вместо цифры букву введу?)
a.b.c.d.e.f - принимаются , ну если "дурак" будит вводить другие букви - вместо них будут писатся ноли и хз шо буде
№ 7 | Автор: babun9999 |
2012-11-14, 21:04
--------->
|
|
|
так сделай, что-бы программа писала о "некорректном вводе" в случае подобного ввода)
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
потом,если время будит - щас нада асемблер учить
№ 9 | Автор: babun9999 |
2012-11-14, 21:07
--------->
|
|
|
Есть хорошая шутка по этому поводу: На Ассемблере можно написать всё что угодно, но жизнь слишком коротка
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|
исправив - *защита от дурака* готова
if m > 'f' then oshibka:=1 else val(m,x,cod); {перевод в числове значеня} if oshibka =1 then begin writeln('ОШИБКА ВВОДА (допистимие символи - 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f )'); readln; halt; end
|
|
|
а если я введу пробел и нажму энтер?
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
Нужна помощь? Сюда: vkontakte.ru/berestovskiy
|
|
|