Помощь - Поиск - Пользователи - Календарь
Полная версия: перевод строки символов в число
Форум «Всё о Паскале» > Pascal, Object Pascal > Теоретические вопросы
>hamka<
В программе вводятся числа как строка символов. (можно также вводить и буквы и т.д. и т.п.) Их требуется преобразовать в числа. Алгоритм таков к последнему числу прибавляем предпоследнее *10 + предпредпоследнее*100 и т.д. Вопрос -> в какую систему счисления нужно переводить символы аски-кода. В 16-рич или 10-тич. И вообще я запуталась.
В итоге программы должна быть "защита от дурака". Но, например, чтобы не брать буквы, нужно проверять строку символов на аски-код? ( выдается несовметимость типов) . или что?
я раньше писала подобную прогу на асм'е. и там как-то все легче было. а здесь... =))
volvo
Ну, во-первых,
Цитата(Правила Раздела)
6. Самое главное - это раздел теоретический, т.е. никаких задач и программ - для этого есть отдельный раздел!

А во вторых:
Цитата(>hamka< @ 16.02.05 20:09)
я раньше писала подобную прогу на асм'е. и там как-то все легче было. а здесь...

"Не верю" (С) Станиславский.
Ну не может быть, чтобы у человека, писавшего эту программу на асме были проблемы с ее реализацией на Паскале.

Цитата(>hamka< @ 16.02.05 20:09)
Алгоритм таков к последнему числу прибавляем предпоследнее *10 + предпредпоследнее*100 и т.д. Вопрос -> в какую систему счисления нужно переводить символы аски-кода.

Согласно этому высказыванию - в 10-ю, если бы было нужно в 16-ричную, надо было бы делать так: "к последнему числу прибавляем предпоследнее * 16 + предпредпоследнее * 256 и т.д."
>hamka<
ну начнемс с того, что для меня легче для написание программ асм. ( возможно лучше его изучила, а в паскале у меня достаточно поверхностные знания).
Этот алгоритм я как раз взяла из проги на асме.
еще раз вопрос.
я нажимаю клавишу -> символ представляется аски-кодом-> оrd'ом переводится в код из таблицы ( и он в 16-ри системе счисления)
А как же то, что Паскаль все выдает в 10 тич системе.
В КАКУЮ СИСТЕМУ НУЖНО ПЕРЕВОДИТЬ СТРОКУ СИМВОЛОВ В ЧИСЛО, ЧТОБЫ ДАЛЬШЕ С НЕЙ РАБОТАТЬ?
volvo
Цитата(>hamka< @ 16.02.05 20:40)
я нажимаю клавишу -> символ представляется аски-кодом-> оrd'ом переводится в код из таблицы ( и он в 16-ри системе счисления)

С каких это пор Ord возвращает 16-ричное число? Ord возвращает 10-ные числа... А кроме того, если с этими числами (полученными из строк) планируется производить еще какие-либо арифметические действия (о чем, кстати, ничего не упоминалось в первоначальном варианте задания), то ответ - переводить нужно в 10-ю с/с... Так как все арифметические операции производятся только с 10-ными числами...
>hamka<
ну пусть оrd возвращает в 10-рич систему. Нажат символ нуль. значит нужно от ord отнять 48 ( что я и делала, чтобы получить 0) но его( нуля) нет т.е.
10 переводится в 1
и почему когда два символа переводятся вместе, например 12, ord возвращает тока 10-тич представление 2-ки.
Altair
А чем не устраивает

var
s:string;
begin
readln(s);
val ...
?

p.s. а если надо из 16-ричной системы, то взять проедурку из FAQ'a
>hamka<
По условию val использовать нельзя
Altair
тогда:
вводим строку.
Ее длинна получилась length.
Затем циклично каждый разряд переводим.
Altair
Цитата
и почему когда два символа переводятся вместе, например 12, ord возвращает тока 10-тич представление 2-ки.

потому что ORD возвращает код СИМВОЛА а не строки (т.е. его назначение в этом)
>hamka<
Цитата(Oleg_Z @ 16.02.05 22:19)
тогда:
вводим строку.
Ее длинна получилась length.
Затем циклично каждый разряд переводим.

но переменная у меня описана как char, поэтому ее длину я посчитать не могу. А если описывать как стринг, то как ее проверить на не цифры?
volvo
А может быть, чтобы не переспрашивать простые вещи друг у друга, все-таки стоило бы привести пример входной строки, и то, что из этой строки надо получить? (И кстати, чем можно пользоваться, а чем нельзя, как например Val), и что в дальнейшем с этим всем делать...

Кусками очень трудно что-либо советовать ... Когда знаешь окончательную задачу, можно подобрать совершенно другой алгоритм...
>hamka<
У меня такая задача -> запрашивается до 10 ( включая 10 ) цифр у пользователя -> их сортировка пузырьком в 2-х направлениях. Цифры могут быть любые. val использовать нельзя. Задача простая, но нужно сделать МАКСИМАЛЬНО защищенную прогу. т.е. можно вводить буквы, бить по клавиатуре и т.д. => выдается сообщение, что неправ. ввод + проверка на мах допустимое число (число я делаю longint). все элементы - целые положит числа. и сейчас моя главная проблема -преобразовать нажатый символ в число ( если это цифра ) . Если тип как char - одни проблемы, если как string - другие.
volvo
Цитата(>hamka< @ 17.02.05 11:44)
запрашивается до 10 ( включая 10 ) цифр у пользователя

В таком случае я ВООБЩЕ не понимаю проблемы... Цифра - это '0' .. '9', она преобразуется через (ord(ch) - ord('0')) к числовому представлению, и заносится в массив, который сортируется...

Хотя я подозреваю, что нужна все-таки работа с числами... Но здесь я не буду это писать... Для этого есть раздел "Задачи". Учитесь задавать вопросы.

P.S. Я же просил привести примеры, а не описание ввода... Вы русский-то язык знаете? На асме она писала...
FreeMan
А на асме работало????? Или хоть компилилось?
>hamka<
Цитата(FreeMan @ 17.02.05 14:45)
А на асме работало????? Или хоть компилилось?

на асме работала защита и естественно перевод символов с число, чтобы дальше уже работать с матрицей из этих чисел.
Altair
Итак, какие проблеммы сейчас?
кажется уже все разжеванно...
отличить букву от цифры по ord и все!
APAL
Цитата(>hamka< @ 17.02.05 11:12)
но переменная у меня описана как char, поэтому ее длину я посчитать не могу. А если описывать как стринг, то как ее проверить на не цифры?

длина типа CHAR = 1 байт, т.е. один символ и не понятно тогда почему - "ее длину я посчитать не могу"

"А если описывать как стринг, то как ее проверить на не цифры?" - так же как и CHAR - к каждому символу обращение через S[k] - соответственно S-string, k-номер символа в строке.
>hamka<
Всем спасибо, я решила свое проблему. Кстати, больше всего мне помог
APAL =))
APAL
Цитата(>hamka< @ 18.02.05 12:08)
Всем спасибо, я решила свое проблему. Кстати, больше всего мне помог
APAL =))


Рад был помочь! :rose:
Digitalator
Цитата(>hamka< @ 18.02.05 20:08)
Всем спасибо, я решила свое проблему. Кстати, больше всего мне помог
APAL =))


Если вам помогло вот это:

Цитата(APAL @ 18.02.05 18:04)
длина типа CHAR  = 1 байт, т.е. один символ и не понятно тогда почему - "ее длину я посчитать не могу"

"А если описывать как стринг, то как ее проверить на не цифры?" - так же как и CHAR  - к каждому символу обращение через S[k] - соответственно S-string, k-номер символа в строке.


то необходимо было почитать раздел "типы" любой книжки по паскалю, перед тем как задавать тут вопросы. Интересные сейчас "программисты" пошли - хотят написать виндоуз без элементарного знания типов :fire:
Altair
я вот тоже удивляюсь...
>hamka<
настоящие программисты пишут по интуиции =))
volvo
Цитата(>hamka< @ 18.02.05 19:49)
настоящие программисты пишут по интуиции =))

Извините, >hamka<, но к Вам это как-то относится? Вы же элементарных вещей не знаете... "Я это делала на асме" - Ну, ну... Вы хоть раз его запускали, асм-то, как файл называется, знаете?

P.S. А вот ник свой Вы оправдываете полностью...
APAL
Не пойму, чего Вы на нее так взъелись?
Цитата(volvo @ 18.02.05 21:06)
P.S. А вот ник свой Вы оправдываете полностью...

Ну а это почему? Ничего подобного я пока что не заметил.

К чему вообще обостряете вопрос?
Форум - для помощи! Так давайте помогать, а не обсуждать кто лучший.
Altair
На то были причины...
просто это не первый раз на форуме "Я могу на асме\си\прологе\джаве\дельфи\алголе\фортране, НО ВОТ НА ПАСКАЛЕ НУ НЕ КАК НЕ ПОЛУЧАЕТСЯ!

а ника коснулись имхо тоже не просто так.
просто задача была полностью разжеванна в пределах первых 13 сообщений включительно...
Digitalator
Цитата
Форум - для помощи! Так давайте помогать, а не обсуждать кто лучший.

По правилам форума необходимо читать FAQ
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.