Перевод строки в численный тип - 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.
Объяснение кода листинга программы
- Создаются переменные s и s1 типа string для хранения введенной строки и ее первого символа после удаления лишних пробелов.
- Создается переменная a типа array[1..100] of real для хранения чисел.
- Создаются переменные n, i, k1, k2, k3, p и d типа integer для хранения счетчика, индексов и других значений.
- Выводится сообщение для ввода строки из чисел, разделенных одним пробелом.
- Строка s присваивается строке, введенной пользователем, с добавлением пробелов между каждым числом.
- Запускается цикл 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].
- После выхода из цикла while выводится сообщение 'Массив чисел'.
- Для каждого i от 1 до n выполняется вывод a[i] с пробелом между каждым числом.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д