• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Перевести числа из текста, записанные в 6-ной системе счисления, в 10-ную

Over77over

Новые
Регистрация
13 Мар 2015
Сообщения
16
Реакции
0
Баллы
0
Перевести числа из текста, записанные в 6-ной системе счисления, в 10-ную

Помогите пожалуйста решить задачу:
Выделить из текста целые числа, записанные в 6-ной системе счисления (считать, что они положительны и в тексте встречаются в виде отдельных "слов") и перевести их в 10-ную систему счисления.

character str*20,st*20,sl*15
integer ns,ks,i,dl,ch
logical p
write (*,*) 'Vvedite stroku'
read(*,'(A20)')str
st=adjustl(str)
L=len_trim(st)
ns=1
ks=index(st,' ')
do while (ks<=L+1)
sl=st(ns:ks)
dl=ks-ns
p=.true.
do i=1,dl,1
if (sl(i:i)<'0'.or.sl(i:i)>'5') then
p=.false.
write(*,*) 'Slovo ne yavlyatesa chislom'
end if
end do

!perevod iz 6-noi systemi v 10-nyu systemy
if (p) then
write (*,*) 'Slovo yavlyaetsa chislom'
read(sl,'(I10)')ch
end if
ns=ks+1
ks=ks+index(st(ks+1:),' ')
write(*,16)st(ns:ks)
16 format (1x,A)
pause
end do
end
 
А что это за ЯП? Извините, что-то не могу сообразить. Фортран?
 
Хотелось бы на фортране конечно же. Но пожалуй сойдет, попробую по аналогии перевести на фортран
 
Но пожалуй сойдет, попробую по аналогии перевести на фортран
Не знаю, сколь Вам это поможет, но вот программа на Паскале:
Код:
Var
 S,W:String;
 i,R,Code:Integer;

Function Six2Ten(N:Integer):Integer;
Var
 M,Q,p:Integer;
begin
 Q:=N;
 p:=1;
 M:=Q mod 10;
 Repeat
  Q:=Q div 10;
  if Q>0 then
   begin
    p:=p*6;
    M:=M+(Q mod 10)*p;
   end;
 Until Q=0;
 Six2Ten:=M;
end;

Begin
 Writeln('Enter the string:');
 ReadLn(S);
 i:=0;
 Repeat
  i:=i+1;
  if i<=Length(S) then
   begin
    if (i=1) or ((i>1) and (S[i-1]=' ') and
       ((Ord(S[i])>47) and (Ord(S[i])<54))) then
     begin
      W:='';
      repeat
       W:=W+S[i];
       i:=i+1;
      until (i>Length(S)) or (Ord(S[i])<48) or (Ord(S[i])>53);
      if (i>Length(S)) or (S[i]=' ') then
       begin
        Val(W,R,Code);
        Writeln;
        Write('Six_based: ',R,'   Ten_based: ',Six2Ten(R));
       end;
     end;
   end;
 Until i>=Length(S);
 Readln
End.
На всякий случай:
Val(S,N,Code) - преобразует строку в число. Code - просто флажок корректности операции.
Ord(C) - возвращает код символа C.
div - целочисленное деление.
mod - остаток от деления.
 

Вложения

  • AA01.webp
    AA01.webp
    9.4 KB · Просмотры: 49
Спасибо. На фортране пишет при любом раскладе "слово не является числом" не знаете с чем это может быть связано?
 
На фортране пишет при любом раскладе "слово не является числом" не знаете с чем это может быть связано?
Знаете... перефразируя слова д'Артаньяна (он, правда, говорил о латыни), "я успел позабыть ту малость Фортрана, которой, впрочем, никогда и не знал". Так что извините.
P.S. Как видите, моя программа справляется "на ура". Попробуйте в ней разобраться.
 
"слово не является числом"
mike написал(а):
"я успел позабыть ту малость Фортрана, которой, впрочем, никогда и не знал"
Наверное ето связано с тем, что нужно перевести с String в Integer, например в Java:
String s="44";
Int ss=Integer.parseInt(s);
 
Наверное ето связано с тем, что нужно перевести с String в Integer, например в Java:
String s="44";
Int ss=Integer.parseInt(s);

read(sl,'(I10)')ch
Переводит слова строки в числа

Проблема вообщем то в том, что я обозначаю p=.true. (т.е. в строке есть слова-являющиеся цифрами). По идее при вводе строки, состоящей из слов и чисел - на экране появится результат: "слово является числом". Но такого не происходит. Какого бы вида строку я не вводил - пишет, что "слово не является числом" (т.е. p=.false.). Естественно, если слово не является числом, соответственно переводить в систему счисления будет нечего.tehno035
 
Знаете, в силу моего практически полного незнания Фортрана, точно не скажу, но разглядывание Вашего кода всё время наводит на мысль, что что-то не то с выделением слов-подстрок. Попробуйте вывести промежуточный результат, чтобы на экране появлялись отдельные слова из введенной Вами строки.
 
Вот такой вот результат
 

Вложения

  • 1.png.webp
    1.png.webp
    24.5 KB · Просмотры: 165
Извините, в той картинке ввел меньше 20-ти символов.
Вот правильная
 

Вложения

  • 2.png.webp
    2.png.webp
    8.6 KB · Просмотры: 250
Ввел в строку "красную строку"(3 пробела в начале),разделил слова и числа пробелами и вот что получилось... Проблема в том что, числа в данной строке фортран не перевел в 10 систему счисления.
 

Вложения

  • 3.png.webp
    3.png.webp
    27.8 KB · Просмотры: 82
Проблема в том что, числа в данной строке фортран не перевел в 10 систему счисления.
Черт, хоть садись Фортран учи на старости лет...
Вообще проблема не только в этом. Мне, например, непонятно, какого лешего программа выдает 7 сообщений о том, что "слово не является числом"? Она что, по каждому символу это делает? Зачем?
Вообще казалось бы естественным, чтобы шло выделение подстрок-слов от начала введенной строки до первого пробела, между пробелами, от последнего пробела до конца строки. Собственно, у меня так и сделано. Советую для начала при вводе исключить множественные пробелы, а также пробелы в начале и в конце строки. Тогда на первом этапе желательно увидеть что-нибудь в таком роде:
Код:
Vvedite stroku
student 512 414

student
slovo ne yavlaetsa chislom

512
slovo yavlaetsa chislom

414
slovo yavlaetsa chislom
А вот как у Вас делается преобразование систем счисления - совсем не понимаю. В Фортране что - есть специальные операторы? Просто я не в курсе. Опишите, пожалуйста, алгоритм словами - попробую разобраться.
 
Вот полностью решённая задача. Спасибо всем за помощь.


character str*70, st*70, sl*15
integer dl,ns,ks,j
real ch
logical p
write(*,*) 'vvod stroki'
read(*,'(a70)') str
st=adjustl(str)
L=len_trim(st)
ns=1
ks=index(st,' ')
do while(ks<=L+1)
sl=st(ns:ks)
dl=ks-ns
p=.true.
do j=1,dl,1
if(sl(j:j)<'0'.or. sl(j:j)>'5') then
p=.false.
end if
end do
if(p) then
ch=0
do j=1,dl,1
!perevod iz 6-noi systemi v 10-nyu
d=ichar(st(ns+j-1:ns+j-1))-48
ch=ch+d*(6**(dl-j))
end do
write(*,16) ch
16 format(1x, F10.0)
else
write(*,*) 'net chisel ili ne podhodit po usloviyu'
end if
ns=ks+1
ks=ks+index(st(ks+1:),' ')
end do
end
 
Назад
Сверху