Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2016, 14:53   #1
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

Здравствуйте! Совсем недавно начал изучать язык программирования паскаль, знания языка практически нулевые. Но вот на днях захотел написать программу по переводу чисел из двоичной системы счисления в десятичную. (Решая задачи по информатике надоело переводить числа на бумажке из одной системы счисления в другую). Долго упорствовал и сегодня программа была написана. Но на мой взгляд программа очень длинная. Поскольку я не знаю процедур и функций, которые можно использовать в помощь при написании программы, я использовал только операторы присвоения, ввода, вывода, операторы условия (if-else) и цикла (while и repeat). И сейчас мне интересно узнать, как, с помощью только данных операторов можно уменьшить длину программного кода. Если кто-нибудь поможет мне в этом и пришлёт свои варианты написания данной программы буду очень благодарен.

Код:
program десятичные_цифры;
   var n, m, a, b, b1, b2, q, s, c, c1, k, l, z, s1, e: integer;
   
begin
   writeln ('Введите десятичное число:');
   readln (n);
   if n<2 then
   begin
   q:=n;
   writeln ('q: ', q);
   end
   else
   begin
   a:=1;
   b:=0;
   while a<=n do
   begin
      a:=a*10;
      b:=b+1;
   end;
   writeln ('В данном числе b= ', b, ' цифр.');
   m:=1;
   b1:=b-1;
   repeat
   m:=m*10;
   b1:=b1-1;
   until b1=0;
   writeln ('m: ', m);
   s:=0;
  c:=b*1;
  c1:=c-1;
  b2:=b*1;
  repeat
  k:= n div m;
  if k mod 2=1 then
  l:=1
  else
  begin
  l:=0;
  end;
  z:=1;
  
  repeat
  
  z:=2*z;
  b2:=b2-1;
  until b2=1;
  
  b:=b-1;
  b2:=b2*b;
  s1:=0;
  s1:=s1+l*z;
  s:=s1+s;
  e:=1;
  
  if c1=1 then
  begin
  e:=1;
  end
  
  else
  begin
  repeat
  e:=e*10;
  c1:=c1-1;
  until c1=1;
  end;
  
  c:=c-1;
  c1:=c*1-1;
  m:=m-9*e;
  
  until m=1;
  
  if n mod 2=1 then
  s:=s+1
  else
  begin
  s:=s+0;
  end;
   writeln (s);
   end;
   
end.

Последний раз редактировалось Аватар; 23.01.2016 в 15:00.
crolikoff вне форума Ответить с цитированием
Старый 23.01.2016, 15:32   #2
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

А что так длинно?
Код:
var i,n,st:integer;
    s:string;
begin
   s:='100100';
   n:=0;
   For i:=Length(s) downto 1 do
   begin
      If i=Length(s) then
         st:=1 else
         st:=st*2;
      If s[i]='1' then
         n:=n+st;
   end;
   Writeln(n);
   Readln;
end.
Сойдет?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]

Последний раз редактировалось newerow1989; 23.01.2016 в 15:34.
newerow1989 вне форума Ответить с цитированием
Старый 23.01.2016, 15:55   #3
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

В вашем случае, если я правильно понял, чтобы ввести число необходимо изменять сам код, и завершать алгоритм приходится вводом любых не нужных данных, что мне кажется не очень удобно. И функция (Length) мне тоже ещё не знакома. А мне хочется узнать, как можно написать алгоритм без использования функций и процедур ( я не знаю ни одной функции и процедуры и даже их суть) и при этом получить наименьший по длине код.
crolikoff вне форума Ответить с цитированием
Старый 23.01.2016, 15:55   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
crolikoff
А что вообще делаешь в программе, кроме как подсчета десятичных знаков во введенном числе? Там не из десятичной в двоичную, не из двоичной в десятичную. Замысел то какой был?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2016, 16:04   #5
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

Я выложил программу впопыхах, как только она была написана, и не нужные данные ни убрал. Дело в том что сначала я подсчитывал число цифр в числе для того, чтобы использовать полученную информацию в дальнейшем. Мой код получился очень запутанным и длинным, т.к. я ещё мало знаю язык паскаль. Вот я и пришёл на форум узнать можно ли написать код короче, избегая не нужных шагов, не используя при этом ни процедур, ни функций. (они мне ещё незнакомы)
crolikoff вне форума Ответить с цитированием
Старый 23.01.2016, 16:10   #6
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

program десятичные_цифры;
var n, m, a, b, b1, b2, q, s, c, c1, k, l, z, s1, e: integer;

begin
writeln ('Введите число двоичной системы счисления:');
readln (n);
if n<2 then
begin
q:=n;
writeln ('Число в десятичной системе счисления ', q);
end
else
begin
a:=1;
b:=0;
while a<=n do
begin
a:=a*10;
b:=b+1;
end;
m:=1;
b1:=b-1;
repeat
m:=m*10;
b1:=b1-1;
until b1=0;
s:=0;
c:=b*1;
c1:=c-1;
b2:=b*1;
repeat
k:= n div m;
if k mod 2=1 then
l:=1
else
begin
l:=0;
end;
z:=1;
repeat
z:=2*z;
b2:=b2-1;
until b2=1;
b:=b-1;
b2:=b2*b;
s1:=0;
s1:=s1+l*z;
s:=s1+s;
e:=1;
if c1=1 then
begin
e:=1;
end
else
begin
repeat
e:=e*10;
c1:=c1-1;
until c1=1;
end;
c:=c-1;
c1:=c*1-1;
m:=m-9*e;
until m=1;
if n mod 2=1 then
s:=s+1
else
begin
s:=s+0;
end;
writeln ('Число в десятичной системе счисления ',s);
end;
end.
crolikoff вне форума Ответить с цитированием
Старый 23.01.2016, 16:22   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
Введите число двоичной системы счисления
Коль в двоичной, то должна вводится строка в виде '10010111'. При чем здесь readln(n) и n интежер?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.01.2016, 16:37   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
не используя при этом ни процедур, ни функций. (они мне ещё незнакомы)
советую для начала лишиться девственности, а уже потом ставить для себя какие-то прикладные задачи. что за блажь такая - писать прогу без функций?
Цитата:
Решая задачи по информатике надоело переводить числа на бумажке из одной системы счисления в другую
У тебя комп, вообще, есть? Ты в курсе, что есть такая штука - калькулятор? Британские учёные недавно изобрели.

Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 23.01.2016 в 16:41.
min@y™ вне форума Ответить с цитированием
Старый 23.01.2016, 16:37   #9
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

Если я введу строку в виде '10101011', то это будут строковые данные, а как в дальнейшем перевести это всё в целочисленные я не знаю. Поэтому я и ввёл сразу данные типа integer, и отталкиваясь от того что в этих данных не может быть цифр больше 1, я и писал алгоритм.
crolikoff вне форума Ответить с цитированием
Старый 23.01.2016, 16:46   #10
crolikoff
Пользователь
 
Регистрация: 23.01.2016
Сообщений: 11
По умолчанию

[QUOTE=min@y™;1573040]советую для начала лишиться девственности, а уже потом ставить для себя какие-то прикладные задачи. что за блажь такая - писать прогу без функций?


Потому что мне кажется это интересным. И лишним для дальнейшего изучения языка программирования не будет.
crolikoff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из двоичной в десятичную систему счисления выдает не правильный результат pompiduskus PHP 0 18.09.2013 21:13
Перевод из двоичной системы в двоично-десятичную (assembler) Dolgan Фриланс 2 27.01.2011 18:01
Pascal ABC. Перевод из двоичной в десятичную систему счисления. ARTEM_KA Помощь студентам 4 17.11.2010 22:15
си++ перевод числа из двоичной системы в десятичную. Bonne Помощь студентам 1 13.04.2010 22:07
Перевод числа из двоичной системы в десятичную С++ kontroller Помощь студентам 2 15.02.2010 20:39