Дана строка S, изображающая вещественное число в формате с плавающей точкой, и целое число N (> 0). Вывести набор символов, изображающих первые N цифр — Pascal(Паскаль)

const
 str: String = '4432.2123456 5';
 num_chars: Set of char = ['+', '-', '.', '0'..'9'];
var
 s, buf: String;
 r: Real;
 i, N, code: Integer;
 symbols: Set of char;
 ch: char;
BEGIN
 WriteLn('Введите строку, изображающую вещественое число и целое число,');
 WriteLn('(или введите пустую строку: ');
 ReadLn(S);
 if S = '' then begin S := str; WriteLn(S) end;
   {Возможны пробелы - ищем начало числа}
   i:=1;
   while (i < length(S)) and (NOT (S[i] in num_chars)) do inc(i);
   if i = length(S) then begin
     WriteLn('Ошибка: Введена пустая строка');
     Halt(1); {немедленный выход из программы}
   end;
   {формируем строку - представление числа}
   buf:='';
   while (i <= length(S)) and (S[i] in num_chars) do begin
     buf:=buf + S[i]; inc(i)
   end;
   if i = length(S) then begin
     WriteLn('ОШИБКА: не введено второе число');
     Halt(1)
   end;
   {пробуем преобразовать, возможны ошибки записи}
   val(buf, r, code);
   if code <> 0 then begin
     WriteLn('ОШИБКА: неверная запись вещестенного числа');
     Halt(1)
   end;
   {чтобы получить второе число просто удаляем первое}
   buf := S;
   delete(buf, 1, i);
   val(buf, N, code);
   if code <> 0 then begin
     Writeln('ОШИБКА: неверная запись второго числа');
     Halt(1)
   end;
   {Определяем набор цифр}
   symbols := [];
   delete(S, i, 255); {убираем остаток}
   {Удаляем десятичную точку}
   delete(S, pos('.',S), 1);
   {Убираем лишние символы. Если N > длины, то ничего старшного - выведем все}
   delete(S, N+1, 255);
   for i:=1 to length(S) do
     if (S[i] in ['0'..'9']) and (NOT (S[i] in symbols)) then
      symbols := symbols + [S[i]];
   {Выводим}
   WriteLn('Использованы следующие цифры:');
   i := 0;
   for ch:= '0' to '9' do
     if ch in Symbols then begin
       Write(ch,' ');
     end;
   WriteLn;
END.

Leave a Comment

76 + = 83