
Вопрос задан 12.08.2023 в 05:02.
Предмет Информатика.
Спрашивает Oorzhak Buyan.
На языке Паскаль напишите программу, решающую следующую задачу: Программе на вход подается
последовательность символов, завершающаяся символом '.' (точка). Идущие подряд последовательности цифр пятеричной системы счисления рассматриваются как числа. Например, последовательность sdf812973j223k содержит три пятеричных числа: 12, 3 и 223. Числа могут быть сколь угодно большими. Знаки '+' и '-' не рассматриваются как части числа. Напечатайте сумму всех таких чисел, которые не превосходят 2^19-1. Можете предполагать, что сумма не превосходит 2^31-1. Если чисел, удовлетворяющих условиям, в последовательности нет, сумма полагается равной - 1.

Ответы на вопрос

Отвечает Левусь Олег.
1. Современное решение
// PascalABC.NET 3.2, сборка 1488 от 21.06.2017
// Внимание! Если программа не работает, обновите версию!
function From5to10(Self:sequence of string):sequence of integer;
extensionmethod;
// Перевод последовательности заданных на строках пятиричных чисел
// в последовательность целых десятичных чисел
begin
foreach var s in Self do begin
var r:=0;
var pa:=1;
foreach var c in s.Reverse do begin
r+=c.ToDigit*pa; pa*=5
end;
yield r
end
end;
begin
var s:=ReadlnString('Введите строку:').MatchValues('[0-4]+').From5To10;
if s.Count=0 then Writeln('S=-1')
else Writeln('S=',s.Sum)
end.
Пример
Введите строку: sdf812973j223k
S=73
2. Решение на TurboPascal ("Так писали наши отцы и деды в 1983 году, так и нас сейчас учат в школе")
uses Crt;
function From5to10(n:string):integer;
{ Перевод из пятиричного числа в строковом представлении
в целое десятичное }
var
i,pa,s:integer;
begin
s:=0;
pa:=1;
for i:=Length(n) downto 1 do begin
s:=s+pa*(Ord(n[i])-Ord('0'));
pa:=pa*5
end;
From5to10:=s
end;
var
s,w:string;
i,k,r:integer;
begin
ClrScr;
Write('Введите строку: ');
Readln(s);
w:='';
r:=0;
k:=0;
for i:=1 to Length(s) do begin
if Pos(s[i],'01234')>0 then begin
if w='' then k:=k+1;
w:=w+s[i]
end
else
if w<>'' then begin
r:=r+From5to10(w);
w:=''
end
end;
if k=0 then Writeln('S=-1')
else Writeln('S=',r);
ReadKey
end.
// PascalABC.NET 3.2, сборка 1488 от 21.06.2017
// Внимание! Если программа не работает, обновите версию!
function From5to10(Self:sequence of string):sequence of integer;
extensionmethod;
// Перевод последовательности заданных на строках пятиричных чисел
// в последовательность целых десятичных чисел
begin
foreach var s in Self do begin
var r:=0;
var pa:=1;
foreach var c in s.Reverse do begin
r+=c.ToDigit*pa; pa*=5
end;
yield r
end
end;
begin
var s:=ReadlnString('Введите строку:').MatchValues('[0-4]+').From5To10;
if s.Count=0 then Writeln('S=-1')
else Writeln('S=',s.Sum)
end.
Пример
Введите строку: sdf812973j223k
S=73
2. Решение на TurboPascal ("Так писали наши отцы и деды в 1983 году, так и нас сейчас учат в школе")
uses Crt;
function From5to10(n:string):integer;
{ Перевод из пятиричного числа в строковом представлении
в целое десятичное }
var
i,pa,s:integer;
begin
s:=0;
pa:=1;
for i:=Length(n) downto 1 do begin
s:=s+pa*(Ord(n[i])-Ord('0'));
pa:=pa*5
end;
From5to10:=s
end;
var
s,w:string;
i,k,r:integer;
begin
ClrScr;
Write('Введите строку: ');
Readln(s);
w:='';
r:=0;
k:=0;
for i:=1 to Length(s) do begin
if Pos(s[i],'01234')>0 then begin
if w='' then k:=k+1;
w:=w+s[i]
end
else
if w<>'' then begin
r:=r+From5to10(w);
w:=''
end
end;
if k=0 then Writeln('S=-1')
else Writeln('S=',r);
ReadKey
end.



Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.
Программа на языке Паскаль для решения данной задачи может выглядеть следующим образом:
pascalprogram SumOfQuinaryNumbers; var inputStr: string; numberStr: string; sum: Int64; i: integer; function QuinaryToDecimal(quinaryStr: string): Int64; var i, len: integer; decimalValue, power: Int64; begin len := Length(quinaryStr); decimalValue := 0; power := 1; for i := len downto 1 do begin if (quinaryStr[i] >= '0') and (quinaryStr[i] <= '4') then begin decimalValue := decimalValue + (Ord(quinaryStr[i]) - Ord('0')) * power; power := power * 5; end else begin writeln('Error: Invalid quinary digit'); halt; end; end; QuinaryToDecimal := decimalValue; end; begin sum := 0; inputStr := ''; writeln('Enter a sequence of characters (terminate with a dot):'); readln(inputStr); i := 1; while i <= Length(inputStr) do begin numberStr := ''; while (i <= Length(inputStr)) and (inputStr[i] in ['0'..'4']) do begin numberStr := numberStr + inputStr[i]; Inc(i); end; if numberStr <> '' then begin if QuinaryToDecimal(numberStr) <= (Int64(1) shl 19) - 1 then sum := sum + QuinaryToDecimal(numberStr); end else Inc(i); end; if sum = 0 then writeln('No valid numbers found.') else writeln('Sum of valid quinary numbers: ', sum); end.
Этот код сначала принимает строку от пользователя, затем проходит через последовательность символов, извлекая и суммируя числа в пятеричной системе, которые удовлетворяют условию. В конечном итоге, программа выводит сумму этих чисел или сообщение о том, что таких чисел нет.


Похожие вопросы

Информатика 75

Информатика 92

Информатика 45

Информатика 51

Информатика 132

Информатика 12

Информатика 43
Топ вопросов за вчера в категории Информатика

Информатика 47

Информатика 33

Информатика 67

Информатика 18

Информатика 25

Информатика 563

Информатика 16
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili