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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 16.12.2015, 13:27   #1
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию Работа с функцией. Делфи.

помогите переделать код в функцию.

Код:
const
    cifry:string='0123456789ABCDEF';
var
    c:byte;
    chislo:integer;
    osnovanie:byte;
    otvet:string;
begin

     write('chislo CC 10 = ');
      readln(chislo);
       repeat
       write('osnovanie CC  2 - 16 = ');
       readln(osnovanie);
       until osnovanie in [2..16];
 otvet:='';
 while chislo>osnovanie do
           begin
           otvet:=cifry[(chislo mod osnovanie)+1] + otvet;
           chislo:=chislo div osnovanie;
           end;
              if chislo=osnovanie then otvet:=cifry[chislo] + otvet
              else otvet:=cifry[chislo + 1] + otvet;
write('otvet ',otvet);
readln

end.
_____
Код программы нужно выделять (форматировать) тегами [CODE] (читать FAQ)
Модератор

Последний раз редактировалось Serge_Bliznykov; 16.12.2015 в 13:31.
GRYZZY вне форума Ответить с цитированием
Старый 16.12.2015, 13:36   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

давайте начнём со следующего.
1) код (алгоритм) явно имеет косяки. попробуйте 16 перевести в 16-ю систему, поймёте, что я имею в виду.
Может стоит его сначала правильно написать?

2) что нужно вынести в функцию? Перевод числа в заданную систему счисления?



Режим ТЕЛЕПАЦИИ включён.
если я правильно понял, что Вам надо, то вот код:
Код:

function ConvertToNewBase(N : integer; Base:byte):string;
const
  cifry:string='0123456789ABCDEF';
var
  tmp : integer;
  //  Result : string; // для Delphi не нужно
begin
  Result := '';
  tmp := abs(N);
  repeat
    Result := cifry[(tmp mod Base)+1] + Result;
    tmp := tmp div Base;
  until tmp=0;
  // ConvertToNewBase := Result // для Delphi не нужно
end;
    
var
    chislo:integer;
    osnovanie:byte;
begin
   write('chislo CC 10 = ');
   readln(chislo);
   repeat
      write('osnovanie CC  2 - 16 = ');
      readln(osnovanie);
   until osnovanie in [2..16];
   write('otvet ', ConvertToNewBase(chislo, osnovanie));
   readln
end.

Последний раз редактировалось Serge_Bliznykov; 16.12.2015 в 13:46.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 13:47   #3
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
давайте начнём со следующего.
1) код (алгоритм) явно имеет косяки. попробуйте 16 перевести в 16-ю систему, поймёте, что я имею в виду.
Может стоит его сначала правильно написать?

2) что нужно вынести в функцию? Перевод числа в заданную систему счисления?
1) не обращайте внимания на косяки.))
2) да. функция должна давать переведённое число
GRYZZY вне форума Ответить с цитированием
Старый 16.12.2015, 13:49   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я выше привёл код.
Проверяйте!
к сожалению, я исправил ваши косяки (упростил и изменил алгоритм перевода).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 13:51   #5
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я выше привёл код.
Проверяйте!
к сожалению, я исправил ваши косяки (упростил и изменил алгоритм перевода).
после исправления косяков в 16 в 16-ю систему стал неправильно переводить.до этого было всё норм. сейчас скрины приложу)
GRYZZY вне форума Ответить с цитированием
Старый 16.12.2015, 13:53   #6
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию

GRYZZY вне форума Ответить с цитированием
Старый 16.12.2015, 14:12   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

скриншот у Вас не получился...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 14:14   #8
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
скриншот у Вас не получился...
вижу..... жал...
GRYZZY вне форума Ответить с цитированием
Старый 16.12.2015, 14:17   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от GRYZZY Посмотреть сообщение
вижу..... жал...
Мне тоже жаль...

Цитата:
после исправления косяков в 16 в 16-ю систему стал неправильно переводить
Простите, что куда перестало переводить?!
У Вас код переводит числа из десятичной в заданную СС (с основанием от 2 до 16)
Что не работает?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 16.12.2015, 14:22   #10
GRYZZY
Пользователь
 
Регистрация: 26.11.2015
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Мне тоже жаль...


Простите, что куда перестало переводить?!
У Вас код переводит числа из десятичной в заданную СС (с основанием от 2 до 16)
Что не работает?
при переводе 16 в 16-ричную СС выдаёт 10 вместо F
GRYZZY вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с функцией в с++ Nnaya Помощь студентам 5 18.12.2014 07:55
работа с функцией Gunina Помощь студентам 2 20.09.2012 19:11
Работа с функцией count() nhr SQL, базы данных 13 05.07.2011 13:50
Работа с функцией (С) ordoss Помощь студентам 8 03.01.2010 19:02
Работа с функцией islower() Greynvi4 Общие вопросы C/C++ 3 07.08.2009 21:37