IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Help!строки!
сообщение
Сообщение #1


Гость






Текст адания:
Дан текст из заглавных латинских букв, за которыми следует пробел. Определите, является ли этот текст правильной записью римскими цифрами числа от 1 до 999, и если является, то записать его арабскими(в десятичной системе)...вот и все. Уменя есть программа для преобразования римских цифр в арабские, но она работает не корректно, т.е число 4 записывает в виде IIII а не IV. Вот она:


Код
program TranslateRomanToArab;
USES CRT;
const
Trans: array[1..13] of record
Arab: word;
Roman: string;
end = ((Arab: 1000; Roman:'M'), (Arab: 900; Roman: 'CM'),
(Arab: 500; Roman: 'D'), (Arab: 400; Roman: 'CD'),
(Arab: 100; Roman: 'C'), (Arab: 90; Roman: 'XC'),
(Arab: 50; Roman: 'L'), (Arab: 40; Roman: 'XL'),
(Arab: 10; Roman: 'X'), (Arab: 9; Roman: 'IX'),
(Arab: 5; Roman: 'V'), (Arab: 4; Roman: 'IV'),
(Arab: 1; Roman: 'I'));

var
Rchislo: string;
Achislo: longint;
CurNumber: byte;
CurSymbol: string;
CurVal: word;
begin
clrscr;
Write('Input Roman Number: ');
ReadLn(Rchislo);

{ If value in RomanNumber is incorrect, then value of ArabianNumber is }
{ incorrect too }

{--- Translate ---------}
Achislo := 0;
CurNumber := 1;
repeat
CurSymbol := Trans[CurNumber].Roman;
CurVal := Trans[CurNumber].Arab;

while Copy(Rchislo, 1, Length(CurSymbol)) = CurSymbol do
begin
Inc(Achislo, CurVal);
Delete(Rchislo, 1, Length(CurSymbol));
end;

Inc(CurNumber); {smeshenie poryadka na 1}
until Rchislo = '';
{--- End of translate ---------}

WriteLn('Arabian Number: ', Achislo);
READLN;
end.


Как мне сюда вставить условие на проверку является ли введеная строка римским числом или нет!!!

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






FAQ: Работа с римскими числами смотрел?

Кроме этого, пользуйся тегами [ code ] и в следующий раз давай более корректное название темы...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






Народ, вот у меня возникла проблема: вроде бы работающая прога:

program stroka;
USES CRT;
Const
konst=13 ;
R: Array[1 .. konst] of String =
('I','IV','V','IX','X','XL','L','XC','C','CD','D','CM','M');
A: Array[1 .. konst] of Integer =
(1,4,5,9,10,40,50,90,100,400,500,900,1000);
Var
N, Err,i : Integer;
vv_stroka: string;
BigText: string;
{---------- perevod stroki v verhniy registr ---------------}
function Big(vv_stroka: string): string;
begin
for i:=1 to length(vv_stroka) do
begin
case vv_stroka[i] of
'a'..'z': dec(vv_stroka[i],32);
'1'..'0': dec(vv_stroka[i],1);
end;
end;
BigText:=vv_stroka;
end;
{---------opredelenie pravil'nosti zapisi rimskogo chisla----------------}
Function Rchislo(N: Integer): String;
Var
Result: String;
i: Integer;
begin
Result:= '';
i :=13; {kolichestvo elementov v massive}
While N > 0 do
begin
While A[i] > N do Dec(i);
Result := Result + R[i];
Dec(N, A[i]); end;
Rchislo := Result;
end;

{------------ rimskoe chislo to arabskoe chislo ---------------}
Function Achislo(BigText: String): integer;
Var
Result,i, p: Integer;
error:string;
begin
Achislo := -1 ;
error:='Dannaya stroka ne yavlaetsya chislom';
Result := 0;
i :=13;
p := 1;
begin
While p <=Length(BigText) do
begin
While Copy(BigText, p, Length(R[i])) <> R[i] do
begin
Dec(i);
If i = 0 then Exit;
end;
Result := Result + A[i];
p := p + Length(R[i]);
end;
If Rchislo(Result) = BigText then Achislo := Result
end;

end;
{================= osnovnaya programma ======================}
begin
clrscr;
write('Vvedite stroku:'); {vvod stroki}
readln(vv_stroka);
Big(vv_stroka); {preobrazovanie v verxniy registr}
writeln('Preibrazovannaya stroka:',BigText:5);
Achislo(BigText);
writeln('chislo:',Achislo(BigText):7);
readln;
end.




Как мне вставить вот эту часть проги на разбиение строки на слова в основную часть проги (выше):


{------------ razbienie stroki na slova ----------------}

Procedure Razbienie(vv_stroka:string);
Var
i:Integer;
w:String;

Begin

If vv_stroka[Length(vv_stroka)]<>' 'Then
vv_stroka:=vv_stroka+' ';
W:=' ';
writeln('VVEDENIE SLOVA:');
For i:=1 To length(vv_stroka) Do
begin
If vv_stroka[i]<>' ' Then w:=w+vv_stroka[i]
Else
Begin
WriteLn(w);
w:=' ' ;
End;

End;
READLN;
end;


вот здесь возникает вопрос: Как вывести на экран, что введеная строка не является римским числом!!!

Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 29.04.2024 22:04
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name