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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2014, 22:52   #1
Студент ММИ
 
Регистрация: 13.11.2014
Сообщений: 4
Сообщение Паскаль: является ли введенная с клавиатуры последовательность символов записью двоичного или шестнадцатеричного числа

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

Код:
Програмка, сразу пишет 0:(
program AAAAAAAA;
var s: string;
N,k,b,d,m,a:longint;
Code:integer;
function step(x:integer):longint;
var i:integer; st:longint;
begin
if x=0 then step:=1 else
begin
st:=1;
for i:=1 to x do begin
st:=st*2;
step:=st;
end;end;
Begin;
Writeln('Azaza');
Readln(s);
while Pos(' ',s)>0 do Delete(s,1, Pos(' ',s));
val('$'+s, N, Code);
if Code<>0
then writeln('Tu lox!!!!')
else writeln('Eto chislo =',N);
val(s,N,Code);
m:=0;
k:=0;
m:=N;
repeat
b:=a mod 10;
d:=a div 10;
m:=m+b*step(k);
k:=k+1;
a:=d;
until d=0; End;End; BEgin
writeln('s 2 v 10 = ',d);
readln

END.
Я решил выводить сразу два значения если таковы есть в двух системах, но оно сразу выбивает 0.... и почему s:=st невозможно, когда оба значения стринговые?

Последний раз редактировалось Stilet; 14.11.2014 в 07:37.
Студент ММИ вне форума Ответить с цитированием
Старый 13.11.2014, 23:11   #2
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Да откуда ж вы такие все одинаковые лезете-то?
Цитата:
и почему s:=st невозможно, когда оба значения стринговые?
Изображения
Тип файла: png 11.png (22.4 Кб, 62 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...

Последний раз редактировалось min@y™; 13.11.2014 в 23:14.
min@y™ вне форума Ответить с цитированием
Старый 14.11.2014, 00:13   #3
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,309
По умолчанию

Замечание:
1. Функция с именем step и переменная step. Вы уж определитесь.
Код:
function step(x:integer):longint;
...
if x=0 then step:=1 else...
2. Если в записи встречаются только ноль и единица, то это может быть и шестнадцатеричным числом.
Какой признак следует использовать для разделения.
Так, например, в начале может быть пара символов Bx10111 или bx10111, где Bx, bx - признак двоичного числа, или Hx hx - соответственно для 16-тиричного.
Другой путь: все символы 0 и 1 - двоичное, а если символы из набора 0..9, A..B, a..b - 16-тиричное.
3. :
Код:
{Описать два набора)
 Const  Simbin = '01';
       Simhex  = '0123456789ABCDEF';

{Описать два флага}
var Db, Hex : boolean;
   s : string;
   i : integer;
...
Db := true;
Hex := true;
...
{В цикле просмотреть слово. В первом варианте цикл следует начать с трех}
for i := 1 {3} to length(s) do begin
{если символ не принадлежит набору Simbin, то Db := false}
{если символ не принадлежит набору Simhex, то Hex := false}
{Для определения принадлежности символа слова одному из наборов следует использовать функцию Pos(), которая вернет номер позиции
if Pos(s[i],Simbin) = 0 then ...
if Pos(s[i],Simhex) = 0 then ... }
end;
if ((NOT Db) AND (NOT Hex)) then {строка не число}
if (Db AND (UpCase(s[1]) = 'D')) then {преобразование двоичного в десятичное}
if (Hex AND (UpCase(s[1]) = 'H')) then {преобразование 16-тиричного в десятичное}
...
Сами преобразования можно оформить в виде функции.
Это алгоритм мазками ...


Как-то так, ...
PS: С кодом не разобрался ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 14.11.2014, 00:24   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Замечание:
1. Функция с именем step и переменная step. Вы уж определитесь.
...
А что такого? В Pascal так и возвращается значение функции.
Эта if x=0 then step:=1 else.. - это же в описании функции.

Можно еще через Result, но не во всех Паскалях вроде..

Последний раз редактировалось type_Oleg; 14.11.2014 в 00:27.
type_Oleg вне форума Ответить с цитированием
Старый 14.11.2014, 00:52   #5
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
А что такого? В Pascal так и возвращается значение функции.
Эта if x=0 then step:=1 else.. - это же в описании функции.

Можно еще через Result, но не во всех Паскалях вроде..
Вообще, лично нас так учили. Присваивать имени функции значение только в само конце подпрограммы и не использовать её нигде до этого.


например:

Код:
function f(x: integer): integer;
begin
...
if Cond then s:=<что-то>...
....
f:=s
end;
Вадим Мошев вне форума Ответить с цитированием
Старый 14.11.2014, 10:57   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Вообще, лично нас так учили. Присваивать имени функции значение только в само конце подпрограммы и не использовать её нигде до этого.
Вадим Мошев, в приведённом Вами примере Вы для промежуточных результатов Вы используете дополнительную переменную (у Вас это переменная s). Так вот, современные реализации языка Паскаль УЖЕ имеют такую переменную с именем Result. её описывать не нужно, а использовать можно и нужно (в том числе и для промежуточных присвоений).
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.11.2014, 11:26   #7
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

А у меня не работает.. Что я делаю не так? Или фряха не современная? Или это не паскаль вовсе?
Изображения
Тип файла: jpg forum.jpg (71.1 Кб, 64 просмотров)
Poma][a вне форума Ответить с цитированием
Старый 14.11.2014, 12:02   #8
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Странно, в Лазарусе Result есть. Хотя там тоже fpc.
А вот в gcc (в Geany) нет.
Изображения
Тип файла: jpg Laz.jpg (40.9 Кб, 129 просмотров)
type_Oleg вне форума Ответить с цитированием
Старый 14.11.2014, 12:42   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
D:\_MainDir\lazarus\fpc\2.6.4\bin\i 386-win32>fpc -Mobjfpc q.pas
Free Pascal Compiler version 2.6.4 [2014/06/14] for i386
Copyright (c) 1993-2014 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling q.pas
Linking q.exe
3 lines compiled, 0.2 sec , 26176 bytes code, 1644 bytes data
Понятно как нуна компилить?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.11.2014, 13:08   #10
Poma][a
Новичок
Джуниор
 
Регистрация: 11.10.2011
Сообщений: 3,882
По умолчанию

Цитата:
Понятно как нуна компилить?
Два последних вопроса как бэ намекают.. не?
Poma][a вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным числом. (язык C) Степан Симаков Помощь студентам 3 01.04.2014 23:10
С клавиатуры вводятся числа, в порядке возрастания их значения. Признаком конца ввода является ввод числа, которое не удовлетворяе Masha Koks Помощь студентам 2 26.11.2013 23:58
Ввести строку, содержащую цифры. Определить является ли она записью шестнадцатеричного числа. Roman1295 Паскаль, Turbo Pascal, PascalABC.NET 10 24.12.2012 22:52
последовательность символов является идентификатором [Паскаль] Алекс74 Помощь студентам 3 16.12.2010 13:27
Определить, является ли заданная строка правильной записью вещественного числа Sergik1977 Паскаль, Turbo Pascal, PascalABC.NET 2 18.10.2007 16:53