Перевод строки в численный тип - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, подскажите по одному вопросу, дали такое задание: перевести числа из строки в численный тип, но без использования стандартных функций, т.е. есть строка 1 34 51 и надо разделить на цифры и преобразовать например в integer, как это можно осуществить?

Решение задачи: «Перевод строки в численный тип»

textual
Листинг программы
var s,s1:string;
    a:array[1..100] of real;
    n,i,k1,k2,k3,p,d:integer;
begin
writeln('Введите строку из чисел, разделенных одним пробелом');
readln(s);
s:=s+' ';
for i:=1 to length(s) do
if s[i]=',' then s[i]:='.';
n:=0;
while pos(' ',s)>0 do
 begin
  s1:=copy(s,1,pos(' ',s)-1);
  delete(s,1,pos(' ',s));
  n:=n+1;
  a[n]:=0;
  if s1[1]='-' then k1:=2 else k1:=1;
  if pos('.',s1)>0 then//если число вещественное
   begin
    k2:=pos('.',s1)-1;//конец целой части
    k3:=length(s1); //конец дробной части
   end
  else
   begin //если целое
    k2:=length(s1);//конец целой части
    k3:=0; //дробной нет
   end;
  for i:=k1 to k2 do //делаемцелую часть
  a[n]:=10*a[n]+ord(s1[i])-ord('0');
  if k3<>0 then///если вещественное, делаем дробную часть
   begin
    p:=1;//показатель степени разряда
    d:=0;//значение
    for i:=k2+2 to k3 do
     begin
      d:=10*d+ord(s1[i])-ord('0');//составляем
      p:=p*10; //повышаем степень
     end;
    a[n]:=a[n]+d/p;//вычисляем дробную часть и прибавляем к целой
   end;
  if k1=2 then a[n]:=-a[n];
 end;
writeln('Массив чисел');
for i:=1 to n do
write(a[i],' ');
end.

Объяснение кода листинга программы

  1. Создаются переменные s и s1 типа string для хранения введенной строки и ее первого символа после удаления лишних пробелов.
  2. Создается переменная a типа array[1..100] of real для хранения чисел.
  3. Создаются переменные n, i, k1, k2, k3, p и d типа integer для хранения счетчика, индексов и других значений.
  4. Выводится сообщение для ввода строки из чисел, разделенных одним пробелом.
  5. Строка s присваивается строке, введенной пользователем, с добавлением пробелов между каждым числом.
  6. Запускается цикл while, который выполняется до тех пор, пока в строке s есть пробелы. Внутри цикла происходит следующее:
    • s1 присваивается подстрока s, начиная с первого символа до текущего символа с пробелом.
    • s удаляется от начала на один символ.
    • n увеличивается на 1.
    • Для каждого символа в s1:
      • Если s1[i] равен ',', то s1[i] заменяется на '.'.
      • Если s1[i] равен '-', то k1 присваивается 2, иначе k1 присваивается 1.
      • Если в s1 есть десятичная точка ('.'), то:
      • k2 присваивается позиция десятичной точки в s1 минус 1.
      • k3 присваивается длина s1.
      • Для каждого символа в s1:
        • Если s1[i] равен '0', то a[n] присваивается 10*a[n] плюс ord(s1[i]) минус ord('0').
        • Если s1[i] больше '0' и меньше '9', то a[n] присваивается 10*a[n] плюс ord(s1[i]) минус ord('0') и показатель степени p умножается на 10. Показатель степени p и значение d инициализируются как 1.
        • Если s1[i] равно '1', '2', '3', '4', '5', '6', '7', '8' или '9', то a[n] присваивается 10*a[n] плюс ord(s1[i]) минус ord('0') и показатель степени p умножается на 10. Значение d и показатель степени p инициализируются как 1.
      • Если s1 не содержит десятичной точки, то k3 присваивается 0.
    • Если k1 равно 2, то a[n] присваивается -a[n].
  7. После выхода из цикла while выводится сообщение 'Массив чисел'.
  8. Для каждого i от 1 до n выполняется вывод a[i] с пробелом между каждым числом.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5
Похожие ответы