Решение № 4 из главы 17.Пользователь вводит в консоль строку , слева имя и через произвольное количество пробелов число баллов
Primary tabs
Пользователь вводит в консоль строку вида:
Имя 123
т.е. слева имя и через произвольное количество пробелов число баллов. Разберите эту строку получив имя пользователя как значение в переменной типа string и число баллов в перееменной типа integer;
program pascal_17_4;
var i , number , int , code : integer; // секция обьявления переменных
s , empty_str , empty_int : string;
begin
write( 'Input name and ball: ' );
readln( s ); // считываем строку
number := 0; // начальное значение
empty_str := '' ;
empty_int := '' ;
for i := 1 to length( s )do // обходим строку
begin
if( s[i] <> ' ' ) and ( number = 0 ) then // если условие верно
empty_str += s[i] // в пустую строку добавляем элемент
else
begin // иначе выполняем
if( s[i] = ' ' ) then // если равна пустой строке
begin
number := 1; // делаем первый if невыполнимым
continue; // пропускаем если символ пустая строка
end
else
if ( s[i] >= '0' ) and ( s[i] <= '9' )then
empty_int += s[i]; // добавляем в пустую строку символы
end;
end;
Val( empty_int , int , code );// преобразуем строку в число
writeln( 'Name: ', empty_str ); // вывод имени
writeln( 'Ball: ' ,int ); // вывод баллов
end.
- Log in to post comments
- 8476 reads
vedro-compota
Wed, 06/03/2020 - 19:27
Permalink
вынести разбор в процедуру
вынести разбор в процедуру
_____________
матфак вгу и остальная классика =)
sergio
Sun, 06/28/2020 - 09:14
Permalink
исправил
исправил
program pascal_17_4; { функция преобразования строки с баллами в integer } function converting_string( acc_str : string ) : integer; var code , ball_in : integer; begin val( acc_str , ball_in , code ); converting_string := ball_in; end; { процедура заполнения двух переменных с именем и баллами } procedure filling_empty_strings( s , empty_str , empty_int : string ); var i , number , ball : integer; begin number := 0; // начальное значение for i := 1 to length( s )do // обходим строку begin if( s[i] <> ' ' ) and ( number = 0 ) then // если условие верно empty_str += s[i] // в пустую строку добавляем элемент else begin // иначе выполняем if( s[i] = ' ' ) then // если равна пустой строке begin number := 1; // делаем первый if невыполнимым continue; // пропускаем если символ пустая строка end else if ( s[i] >= '0' ) and ( s[i] <= '9' )then empty_int += s[i]; // добавляем в пустую строку символы end; end; ball := converting_string( empty_int ); writeln('name: ' ,empty_str , ' ' , 'ball: ' ,ball ); end; var input_str , str_in , int_in : string; // секция обьявления переменных begin // начало основной программы write( 'Input name and ball: ' ); readln( input_str ); // считываем строку str_in := '' ; int_in := '' ; filling_empty_strings( input_str , str_in , int_in ); // вызов с передачей аргументов end. // зaвершение основной программыvedro-compota
Wed, 06/17/2020 - 19:28
Permalink
не смешивать в процедуре
не смешивать в процедуре решение конкретной задачи и работу с интерфейсом (в целом - "побочный эффект").
_____________
матфак вгу и остальная классика =)
vedro-compota
Thu, 06/11/2020 - 20:02
Permalink
пусть filling_empty_strings()
пусть filling_empty_strings() сразу возвращает готовый результат.
_____________
матфак вгу и остальная классика =)
sergio
Sun, 06/28/2020 - 09:10
Permalink
исправил
program pascal_17_4; { процедура заполнения двух переменных с именем и баллами } procedure filling_empty_strings(s:string; var empty_str,empty_int:string ; var empty_ball :integer); var i, number, ball, code : integer; begin // начало тела процедуры number := 0; // начальное значение for i := 1 to length( s )do // обходим строку begin if( s[i] <> ' ' ) and ( number = 0 ) then // если условие верно empty_str += s[i] // в пустую строку добавляем символы имени else begin // иначе выполняем if( s[i] = ' ' ) then // если равна пустой строке begin number := 1; // делаем первый if невыполнимым continue; // пропускаем если символ пустая строка end else if ( s[i] >= '0' ) and ( s[i] <= '9' )then empty_int += s[i]; // добавляем в пустую строку символы баллов end; end; val( empty_int,empty_ball, code ); // преобразование строки в integer end; // завершение тела процедуры var input_str , str_in , int_in : string; // секция обьявления переменных int_ball : integer; begin // начало основной программы write( 'Input name and ball: ' ); readln( input_str ); // считываем строку str_in := '' ; int_in := '' ; filling_empty_strings( input_str , str_in , int_in ,int_ball ); // вызов с передачей аргументов writeln( 'name: ' ,str_in , ' ball: ',int_ball ); end. // зaвершение основной программыvedro-compota
Wed, 06/24/2020 - 19:31
Permalink
procedure filling_empty
-- достаточно 3 переменных на вход, зачем 4-ре?
_____________
матфак вгу и остальная классика =)
sergio
Sun, 06/28/2020 - 09:16
Permalink
поправил
program pascal_17_4; { функция преобразования строки с баллами в integer } function converting_string( acc_str : string ) : integer; var code , ball_in : integer; begin val( acc_str , ball_in , code ); converting_string := ball_in; end; { процедура заполнения двух переменных с именем и баллами } procedure filling_empty_strings( s , empty_str , empty_int : string ); var i , number , ball : integer; begin number := 0; // начальное значение for i := 1 to length( s )do // обходим строку begin if( s[i] <> ' ' ) and ( number = 0 ) then // если условие верно empty_str += s[i] // в пустую строку добавляем элемент else begin // иначе выполняем if( s[i] = ' ' ) then // если равна пустой строке begin number := 1; // делаем первый if невыполнимым continue; // пропускаем если символ пустая строка end else if ( s[i] >= '0' ) and ( s[i] <= '9' )then empty_int += s[i]; // добавляем в пустую строку символы end; end; ball := converting_string( empty_int ); writeln('name: ' ,empty_str , ' ' , 'ball: ' ,ball ); end; var input_str , str_in , int_in : string; // секция обьявления переменных begin // начало основной программы write( 'Input name and ball: ' ); readln( input_str ); // считываем строку str_in := '' ; int_in := '' ; filling_empty_strings( input_str , str_in , int_in ); // вызов с передачей аргументов end. // зaвершение основной программыvedro-compota
Wed, 07/01/2020 - 20:19
Permalink
убрать побочный эффект из
убрать побочный эффект из процедуры.
_____________
матфак вгу и остальная классика =)