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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2009, 16:10   #1
overrr
Новичок
Джуниор
 
Регистрация: 27.09.2009
Сообщений: 6
По умолчанию Составление блок-схемы

Задачка простая, но после матан'а в голову ничего уже не лезет, а сдать нужно завтра.
"Составить блок-схему к задаче:
Подсчитать количество цифр в позиционной записи целого числа (возможно отрицательного) в системе счисления с заданным основанием. Число задано своим значением."
Вопрос в том, что немного не пойму, как её написать на паскале, вот и трудность с блок-схемой.
P. S. просьба новичка сильно не пинать, как тут было написано - "стану крутым - выручу"))
Вот код, точнее зачатки):
program schisl;
var a,p,s:integer;
begin
repeat
writeln('введите p>1');
readln(p);
until p<1;
writeln('Введите a')
readln (a)

а вот дальше сложность, думаю, надо как-то через div делать, при этом включая счетчик, а в конце вывести показания этого счетчика, это и будет количеством цифр.
Проблема в том, что в школе программирования не было практически, а в Универе априори считается, что мы должны его знать после школы.

Последний раз редактировалось overrr; 27.09.2009 в 16:17.
overrr вне форума Ответить с цитированием
Старый 27.09.2009, 17:50   #2
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Код:
program schisl;
var a,p,s:integer;
begin
repeat
writeln('введите p>1');
readln(p);
until p<1;
writeln('Введите a')
readln (a)
Что это? Вы вводите p пока оно не станет равно < 1... Косяки, да и зачем вам его вводить?
Не могу понять в чем проблемма!!! Считываете число как строку, смотрите нет ли перед ним знака минус, и вперед!!!
Код:
var s:string;
begin
 Write('Введите строку: ');
 readln(s);
  if s[1] = '-' then Writeln(Length(s)-1) else Writeln(Length(s));
end;
Искусственный интеллект - фигня по сравнению с естественной глупостью

Последний раз редактировалось Impuls1989; 27.09.2009 в 17:52.
Impuls1989 вне форума Ответить с цитированием
Старый 27.09.2009, 17:56   #3
overrr
Новичок
Джуниор
 
Регистрация: 27.09.2009
Сообщений: 6
По умолчанию

Проблема в том, что мне дано число в 10й системе счисления. Программа должна его переводить в систему с основанием P (P>1), а вот уже там считать, сколько цифр!
Блин, там опечатка, пардон, считываю p до тех пор, пока оно не станет больше 1

Последний раз редактировалось overrr; 27.09.2009 в 17:58.
overrr вне форума Ответить с цитированием
Старый 27.09.2009, 18:02   #4
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Цитата:
Сообщение от overrr Посмотреть сообщение
Проблема в том, что мне дано число в 10й системе счисления. Программа должна его переводить в систему с основанием P (P>1), а вот уже там считать, сколько цифр!
Блин, там опечатка, пардон, считываю p до тех пор, пока оно не станет больше 1
Ну тогда вот тебе две функции:
Код:
function FromDec(n, radix:longint):string; {перевод числа n из 10-ной в radix c/c}
 var
  s: String;
 const
  digit: string[16]='0123456789ABCDEF';
begin
 s:='';
 repeat
  s:=digit[(n mod radix)+1]+s;
  n:=n div radix;
 until n=0;
FromDec:=s;
end;

function ToDec(n:string; radix:longint):longint; {перевод числа n из radix в 10-ную}
 var
  m, i: longint;
 const
  digit: string[16]='0123456789ABCDEF';
begin
 m:=0;
  while n[1]='0' do delete(n,1,1);
   for i:=1 to length(n) do 
     m:=m*radix+pos(n[i],digit)-1;
   ToDec:=m;
end;
Искусственный интеллект - фигня по сравнению с естественной глупостью
Impuls1989 вне форума Ответить с цитированием
Старый 27.09.2009, 18:03   #5
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Код:
program schisl;
var
   p, i : integer;

Begin
   Write('Enter p: ');
   ReadLn(p);

   i := 1;
   while abs(p) >= 10 do
   begin
      p := p div 10;
      i := i + 1;
   end;

   writeln('Answer: ', i);
   readln;
End.
netrino вне форума Ответить с цитированием
Старый 27.09.2009, 18:12   #6
overrr
Новичок
Джуниор
 
Регистрация: 27.09.2009
Сообщений: 6
По умолчанию

netrino:
Вы написали количество цифр в числе, которое записано в системе счисления, с основанием 10. А нужно сначала перевести число из 10й системы счисления в P-ичную. А вот потом считать, сколько в ней цифр!
Impuls1989:
А нет ли метода по-проще?
А то многих операторов я просто не знаю, из описанных вами)
Да и концовку программы, в принципе, написал товарищ netrino,
а вот сам перевод из 10й в P-ичную я не могу понять как сделать. (перевод обратно в 10ю мне не нужен.)

В общем, суть такова:
1) Вводим p (Основание новой системы счисления)
2) Вводим А (Число в 10й системе счисления)
3) Переводим А в P-ичную систему счисления. (вот это не пойму как!!!)
4) Считаем, сколько в этом числе цифр.

Надеюсь, я понятно изложил проблему))
overrr вне форума Ответить с цитированием
Старый 27.09.2009, 18:18   #7
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Тогда нужно использовать ф-ции, которые привёл Impuls1989, а именно FromDec. Вызывать её так:
Код:
var
   s : string;
...
s := FromDec(a, p);
И дальше, как писал ранее Impuls1989

Хотя ещё так можно:
Код:
program schisl;
var
   p, a, i : integer;

Begin
   Write('Enter p: ');
   ReadLn(p);

   Write('Enter a: ');
   ReadLn(a);

   i := 1;
   while abs(a) >= p do
   begin
      a := a div p;
      i := i + 1;
   end;


   writeln('Answer: ', i);
   readln;
End.

Последний раз редактировалось netrino; 27.09.2009 в 18:21.
netrino вне форума Ответить с цитированием
Старый 27.09.2009, 18:20   #8
Impuls1989
Форумчанин
 
Аватар для Impuls1989
 
Регистрация: 16.08.2008
Сообщений: 276
По умолчанию

Упс... Поменял в связи со сменой условия))
__________________________________
ооооо... Горе ты мое!
Вот держи:
Код:
program schisl; uses crt;
var
   p,i: integer;
function FromDec(n, radix:longint):string; {перевод числа n из 10-ной в radix c/c}
 var
  s: String;
 const
  digit: string[16]='0123456789ABCDEF';
begin
 s:='';
 repeat
  s:=digit[(n mod radix)+1]+s;
  n:=n div radix;
 until n=0;
FromDec:=s;
end;

Begin
  repeat
    ClrScr;
   Write('Введите систему счисления: ');
   ReadLn(p);
  until ((p>1) and (p<=16))
  Write('Введите число: ');
  readln(i);
   if (p = 10) then 
    begin
      val(i,s);
      if (s[1] = '-') then Writeln(Length(s)-1) else Writeln(length(s));
    end else 
    begin
      Writeln(Length(FromDec(i,p));
    end;
   readln;
end.
Вот как-то так
Искусственный интеллект - фигня по сравнению с естественной глупостью

Последний раз редактировалось Impuls1989; 27.09.2009 в 18:28.
Impuls1989 вне форума Ответить с цитированием
Старый 27.09.2009, 18:30   #9
overrr
Новичок
Джуниор
 
Регистрация: 27.09.2009
Сообщений: 6
По умолчанию

Хм, спасибо, разобрался, но нет ограничения на p сверху! То есть условия, что p<16 не нужно вроде как?
overrr вне форума Ответить с цитированием
Старый 27.09.2009, 18:31   #10
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Если p будет больше 16-ти, то неясно какие символы использовать для представления числа ) потому в строку перевести его будет нельзя(по крайней мере этой ф-цией)
netrino вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
блок-схемы lucky Свободное общение 6 15.06.2009 18:38
Блок-схемы С++ prikolist Общие вопросы C/C++ 0 19.05.2009 17:09
Составление Блок-схем petrovk Помощь студентам 1 08.01.2009 09:53
Блок-схемы С++ Wia Помощь студентам 10 23.12.2008 17:52