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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2015, 21:47   #1
_Санек_
Пользователь
 
Регистрация: 02.09.2010
Сообщений: 52
По умолчанию Pascal перевод в десятичную с/с

Программа должна считывать числа в двоичной с/с из текстового файла(числа отделены '_') и переводить их в десятичные числа. То верно переводит, то неверно, а в чем ошибка никак не могу понять.
Исправьте, пожалуйста, что не так:
Код:
type
  vector= array [1..257] of real;
function vozvedenie_v_stepen(k: integer):real;
var
 i: integer;
 y:real;
begin
  y:=1;
  for i:=1 to k do
  y:=y*2;
  vozvedenie_v_stepen:=y;
end;
procedure Perevod_iz_2_v_10(M: vector; cout: integer; var chislo: real);
var
  i: integer;
begin
  chislo:=0;
  for i:=cout downto 1 do
  begin
    if m[i]=1 then
    chislo:=chislo+vozvedenie_v_stepen(cout-i)
  end;
end;
var
  f: file of char;
  chislo: array [1..257] of real;
  massiv: array [1..257] of char;
  mas: vector;
  bukva: string;
  i,j,z,jj,g,k,cod: integer;
  cifra: real;
  put: string;
begin
  writeln('Enter put k file');
  readln(put);
  assign(f, put);
  i:=1;
  reset(f);
  while (not eof(f)) and (i<257) do
  begin
    read(f, massiv[i]);
    i:=i+1;
  end;
  close(f);
  writeln('Ishodnyi file:');
  for j:=1 to i do
  begin
    write(massiv[j]);
  end;
  jj:=1;
  z:=0;
  writeln;
  for j:=1 to i do
  begin
    if massiv[j]='_'
    then
    begin
    z:=z+1;
      for g:=jj to j-1 do
      begin
        bukva:=massiv[g];
        val(bukva, cifra, cod);
        mas[g]:=cifra;
      end;
    k:=j-jj;
    jj:=j+1;
    Perevod_iz_2_v_10(mas, k, chislo[z]);
    writeln(z:2, ' chislo = ', chislo[z]:5:1);
    end;
  end;
  readln;
end.
_Санек_ вне форума Ответить с цитированием
Старый 11.04.2015, 06:43   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Чепурга какая-то... Извини уж..
Ниче не понял в коде, предоставлю свое виденье:
Код:
  writeln; cifra:=0;
  for j:=1 to i do  begin
    if massiv[j]='_'  then begin
      writeln(cifra); cifra:=0;
    end else begin
      cifra:=cifra+byte(massiv[j]='1');
      cifra:=cifra shl 1;      
    end;
  end;
  readln;
end.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.04.2015, 20:32   #3
_Санек_
Пользователь
 
Регистрация: 02.09.2010
Сообщений: 52
По умолчанию

Вот более понятно(но все равно не работает):
Код:
function vozvedenie_v_stepen(k: integer):word; {функция возводит 2 в степень}
var
 i: integer;
 y: word;
begin
  y:=1;
  for i:=1 to k do
  y:=y*2;
  vozvedenie_v_stepen:=y;
end;
function bin_2_dec(s: String): Word; {функция переводит из строки в число десятичное}
var
  i: Integer;
  r: Word;
begin
  r:=0;
  for i:=length(s) downto 1 do
    if s[i]='1' then r:=r+vozvedenie_v_stepen(length(s)-i);
  bin_2_dec:=r;
end;
var
  f: text;
  i,j,k,z,m: integer;
  put,stroka: string;
  str: array [1..125] of string;
begin
  writeln('Enter put k file');
  readln(put);
  assign(f, put);
  reset(f);
  while not eoln(f) do
    read(f, stroka);
  close(f); {считали строку из файла можно его и закрыть}
  writeln(stroka);   {вывод считанной строки}
  k:=0;
  z:=1;
  for i:=1 to length(stroka) do  {пускаем цикл по всей считанной строке}
  begin
    if stroka[i]='_'    {если i-ый символ - пробел}
    then
    begin
      k:=k+1;
      m:=0;
      for j:=z to i-1 do   {от предыдущего пробела до нынешнего}
      begin
        m:=m+1;
        str[k][m]:=stroka[j];  {к-ое число равно всему тому, что между пробелами}
      end;
      writeln('* ',str[k], ' *');   {вывод к-ого числа}
      z:=i+1;   {запоминаем номер пробела, чтобы в следующую итерацию с него начать}
    end;
  end;
  for i:=1 to k do
  begin
    writeln('* ', bin_2_dec(str[i]), ' *'); {вывод десятичных чисел переведенных из двоичной системы}
  end;
  readln;
end.
_Санек_ вне форума Ответить с цитированием
Старый 17.04.2015, 22:25   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

_Санек_, запакуйте свой файл с числами и архив выложите на форум ("Расширенный режим" - "Управление вложениями")
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.04.2015, 10:10   #5
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Был бы я студентотой, построил бы прогу на основе вот такой функции:
Код:
// перевод двоичного числа в виде строки в диапазоне
// 0...11111111111111111111111111111111 в 32-битный беззнаковый вид.
// при ошибке возвращает false.
function BinToInt(const Source: string; out Value: LongWord): Boolean;
var
  Index, Len: Integer;
  Success: Boolean;
begin
  Len:= Length(Source);
  Value:= 0;
  Success:= (Len > 0) and (Len < 33);
  
  if Success
    then for Index:= Len downto 1 do
           if Source[Index] in ['0', '1']
             then Inc(Value, (1 shl (Index - 1)) * (Ord(Source[Index]) - $30))
             else begin
                    Success:= False;
                    Break;
                  end;

  BinToInt:= Success;
end;
Ахтунг! Аттеншн! Внимание! Увага!!! SHIT-CODE detected!!! Не отлаживал, писал на заборе!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.04.2015, 10:36   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Был бы я студентотой, построил бы прогу на основе вот такой функции:
А я на такой: http://www.programmersforum.ru/showp...4&postcount=36
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 18.04.2015, 10:44   #7
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Код:
function Perewod_iz_2_v_10(chislo_n: string):int64;
var i,j:integer;
    s:string;
begin
   Result:=0;
   For j:=1 to Length(chislo_n) do
   begin
      s:=chislo_n[j];
      i:=StrToInt(s);
      Result:=Result+i*Round(exp(ln(2)*(Length(chislo_n)-j)));
   end;
end;
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Старый 18.04.2015, 10:48   #8
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Сообщение от newerow1989 Посмотреть сообщение
Код:
function Perewod_iz_2_v_10(chislo_n: string):int64;
var i,j:integer;
    s:string;
begin
   Result:=0;
   For j:=1 to Length(chislo_n) do
   begin
      s:=chislo_n[j];
      i:=StrToInt(s);
      Result:=Result+i*Round(exp(ln(2)*(Length(chislo_n)-j)));
   end;
end;
Ну ты дал стране угля!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 18.04.2015, 10:49   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Да, экспонента и логарифм для преобразования строкового двоичного во внутренее представление это круто
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 18.04.2015, 10:50   #10
newerow1989
Я самый любопытный
Участник клуба
 
Аватар для newerow1989
 
Регистрация: 24.07.2012
Сообщений: 1,949
По умолчанию

Цитата:
Ну ты дал стране угля!
Че не так?
С запрограммированным приветом, Неверов Евгений!
Сайт: http://newerow1989.ru
[Паскаль] [Delphi]
newerow1989 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод из восьмеричной в десятичную с/с zlobrik Помощь студентам 2 01.04.2014 20:02
Перевод из восьмеричной в десятичную с/с zlobrik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 23.03.2014 21:07
расчетно-графическая работа "перевод числа из разных систем счисления в десятичную" (Pascal, среда разработки lazarus) Екатерина 123 Помощь студентам 9 26.05.2013 09:15
Pascal ABC. Перевод из двоичной в десятичную систему счисления. ARTEM_KA Помощь студентам 4 17.11.2010 22:15
Перевод из 16ой в десятичную fiascko Помощь студентам 4 26.10.2010 17:28