Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Pascal]Перевод числа из p-ричной в десятичную сс 
V
    Опции темы
6pika4u
Дата 18.5.2008, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



Нужно перевести данное в p-ричной системе счисления число в десятичную.
Помогите пожалуйста с программой, очень прошу. Только пожалуйста не очень сложно, я в 10-ом классе учусь)
PM MAIL   Вверх
mr.Anderson
Дата 18.5.2008, 13:53 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Написал. Для двоичных проверил, должно работать и для остальных.
Код

program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils;

var
 src : String;
 pos : Byte;
 num : Integer;
 dig : Integer;
 i   : Integer;
 c   : Integer;

//наиболее простая (и медленная) функция возведения в степень
function pow( base, st: Integer ): Integer;
var
 i : Integer;
begin
 if( st = 0 ) then
 begin
  Result := 1;
  exit;
 end;

 if( st = 1 ) then
 begin
  Result := base;
  exit;
 end;

 Result := base;
 
 for i:=2 to st do
  Result := Result * base;
end;
 
begin
  write( 'Enter a number: ' ); readln( src );
  write( 'Enter a base value of the number: '); readln( pos );

  num := 0;
  
  for i:=Length(src) downto 1 do
  begin
   val( src[i], dig, c ); //цифра
   num := num + dig*pow( pos, Length(src)-i );
  end;

  write( 'Your number in a decimal system: ', num );
  readln;
end.



Добавлено через 2 минуты и 16 секунд
Не пугайся длины кода, там большая часть - это функция возведения в степень (к своему стыду, не помню такой в дельфе, написал руками). А сама программа - строки 39-51.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 18.5.2008, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(mr.Anderson @  18.5.2008,  14:53 Найти цитируемый пост)
Не пугайся длины кода, там большая часть - это функция возведения в степень (к своему стыду, не помню такой в дельфе, написал руками). А сама программа - строки 39-51. 


uses Math;

Power?

PM   Вверх
mr.Anderson
Дата 18.5.2008, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



THandle, ну типа того. smile Просто не юзал ее никогда, не приходилось.

Добавлено через 1 минуту и 29 секунд
У всего есть свои плюсы: не подключали дополнительный модуль, размер программы стал немного меньше + потренировали мозги при написании алгоритма возведения в степень... smile

Это сообщение отредактировал(а) mr.Anderson - 18.5.2008, 14:04


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
6pika4u
Дата 18.5.2008, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



ммм,мне в паскале нужно...
это сложно
я тут много не поняла(
но все равно спасибо

Добавлено через 4 минуты и 54 секунды
покопалась немного.
мы просто не прошли,что такое src, pos, num, dig 
переменные?
объясните плиз,а так вроде все понятно)
PM MAIL   Вверх
mr.Anderson
Дата 18.5.2008, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



Во всем разобралась, а что такое src/pos/num/dig - не поняла? smile С ума сойти. Да, это переменные.


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 18.5.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



6pika4u, глянул сейчас код mr.Anderson'a.

Вроде чтобы в Паскале работало надо:

Убрать:

Код

{$APPTYPE CONSOLE}
uses
  SysUtils;


заменить все result на имя функции.

Вроде все, должно работать. smile 
PM   Вверх
volvo877
Дата 18.5.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2073
Регистрация: 15.11.2004

Репутация: 34
Всего: 116



6pika4u, можно было сначала в разделе Паскаль проверить?

http://forum.vingrad.ru/index.php?showtopi...t&p=1473697
PM MAIL   Вверх
6pika4u
Дата 18.5.2008, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



mr.Anderson, просто что они конкретно обозначают не поняла)
PM MAIL   Вверх
6pika4u
Дата 18.5.2008, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



volvo877,спасибо большое!
я искала-не нашла
извиняюсь,спасибо всем
PM MAIL   Вверх
mr.Anderson
Дата 18.5.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



 smile Ну вот, еще одна помощь прошла зря...


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
THandle
Дата 18.5.2008, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Цитата(mr.Anderson @  18.5.2008,  16:40 Найти цитируемый пост)
Ну вот, еще одна помощь прошла зря... 


Не зря.

Смотри на такую помощь так:
"Я делаю это не для кого-то, я делаю это для себя". И все будет гуд smile 


Извиняюсь за оффтопик.

Это сообщение отредактировал(а) THandle - 18.5.2008, 15:43
PM   Вверх
mr.Anderson
Дата 18.5.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


iOS Lead Developer
****


Профиль
Группа: Участник Клуба
Сообщений: 3374
Регистрация: 20.12.2004
Где: далеко

Репутация: 16
Всего: 128



THandle, я привык как раз наоборот. smile Жаль, когда проходит впустую. Ну да ладно. smile


--------------------
user posted image

user posted image
PM MAIL ICQ Skype   Вверх
KasMP
Дата 18.5.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 586
Регистрация: 8.8.2006

Репутация: 1
Всего: 30



Во-первых, система счисление P может быть больше десятичной.
Надо предусмотреть этот случай и уметь переводить "A...Z" в "10..35":

Код
function  Perevod (const c: char): integer;
      {переводит '0'...'9' в 0...9 и 'A'...'Z' в 10...35}
      var    temp: integer;
      begin
      temp:=ord(c)-ord0;
      if temp<=9 then Perevod:=temp else Perevod:=temp-7;
      end;


Потом, ничто не мешает пользователю ввести, например, СО=3 и число "231". Надо проверять корректность входных данных:
Код
function  Check (var p: integer; var s: string): boolean;
      {проверяет соответствие P и s}
      var    i, len: integer;
        h: boolean;
        begin
      len:=length(s);
      i:=0;
      while h and (i<len) do
        begin
        inc(i);
        if (s[i]<>',') and (Perevod(s[i])>=p) then h:=false;
        end;
      Check:=h;
      end;

 
В конечном итоге нам будет нужно посчитать значение многочлена с известными коэффициентами. Удобно это делать по схеме Горнера.
Для целой части введенного числа:
Код
function  Gorner (var p: integer; var s: string): integer;
      var    temp, len: integer;
         i, k: integer;
      begin
      len:=length(s);
      temp:=Perevod(s[1]);
      for i:=2 to len do
        begin
        k:=Perevod(s[i])+temp*p;
        temp:=k;
        end;
      Gorner:=temp;
      end;


Для дробной части введенного числа:
Код
function  GornerDrob (var p: integer; var s: string): real;
      var    temp: real;
         i, len: integer;
      begin
      len:=length(s);
      temp:=Perevod(s[len])/p;
      for i:=(len-1) downto 1 do temp:=(temp+Perevod(s[i]))/p;
      GornerDrob:=temp;
      end;


Надо знать, какую часть числа считать как целую, а какую - как дробную: определяем позицию запятой.
Код
function  Position3 (var s: string): integer;
      {выдает позицию запятой в s;
       если запятой нет, то Position3=0}
      var    len, i: integer;
        h: integer;
      begin
      len:=length(s)-1; i:=2; h:=0;
      while (h=0) and (i<=len) do
        begin
        if s[i]=',' then h:=i;
        inc(i);
        end;
      Position3:=h;
      end;


Ну и теперь осталось объединить все эти действия:
Код
function  Finish3 (var p: integer; var s: string): real;
      var    temp: integer;
        s1, s2: string;
      begin
      temp:=Position3(s);
      if temp=0 then Finish3:=Gorner(p,s)
       else
        begin
        s1:=''; s2:='';
        s1:=copy(s,1,temp-1);
        s2:=copy(s,temp+1,length(s)-temp);
        Finish3:=Gorner(p,s1)+GornerDrob(p,s2);
        end;
      end;


Добавлено через 1 минуту и 2 секунды
ord0 - это константа, равная ord('0').

Добавлено через 2 минуты и 43 секунды
Функция Check использовалась в процедурах ввода (из файла, с клавиатуры). Тебе надо подумать, куда лучше включить ее у себя.
PM MAIL   Вверх
6pika4u
Дата 18.5.2008, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 18.5.2008

Репутация: нет
Всего: нет



mr.Anderson,извини пожалйста,с просто слепая( и THandle прав
KasMP,ну эмммм...в принципе это очень просто,конечно))
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1131 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.