Новые сообщения · Правила  
  • Страница 1 из 1
  • 1
перевод чисел по системам исчисления
я смотрю - ви енштейни такие умние (замечания с предадущих тем ) !
так ответьте на мой вопрос !
от програма (недоделана) но переводит с 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 | Автор: Berestovskiy | 2012-11-13, 01:44   |  Репутация: [ + 211 ]
от и готова програма !
переводит с (от 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
4 | Автор: Berestovskiy | 2012-11-14, 18:34   |  Репутация: [ + 211 ]
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
6 | Автор: Berestovskiy | 2012-11-14, 20:48   |  Репутация: [ + 211 ]
Quote (Berestovskiy)
а если я вместо цифры букву введу?)


a.b.c.d.e.f - принимаются , ну если "дурак" будит вводить другие букви - вместо них будут писатся ноли и хз шо буде
7 | Автор: babun9999 | 2012-11-14, 21:04   --------->
так сделай, что-бы программа писала о "некорректном вводе" в случае подобного ввода)

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
8 | Автор: Berestovskiy | 2012-11-14, 21:06   |  Репутация: [ + 211 ]
потом,если время будит - щас нада асемблер учить
9 | Автор: babun9999 | 2012-11-14, 21:07   --------->
Есть хорошая шутка по этому поводу:
На Ассемблере можно написать всё что угодно, но жизнь слишком коротка


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
10 | Автор: Berestovskiy | 2012-11-14, 21:54   |  Репутация: [ + 211 ]
исправив - *защита от дурака* готова

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
11 | Автор: babun9999 | 2012-11-15, 17:09   --------->
а если я введу пробел и нажму энтер?

Нужна помощь? Сюда: vkontakte.ru/berestovskiy
12 | Автор: Berestovskiy | 2012-11-15, 18:01   |  Репутация: [ + 211 ]


Нужна помощь? Сюда: vkontakte.ru/berestovskiy
12 | Автор: Berestovskiy | 2012-11-15, 18:01   |  Репутация: [ + 211 ]
  • Страница 1 из 1
  • 1
Поиск: