Решение № 4 из главы 17.Пользователь вводит в консоль строку , слева имя и через произвольное количество пробелов число баллов

Задача №4.Глава 17

Пользователь вводит в консоль строку вида:
Имя 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.
    
    
vedro-compota's picture

вынести разбор в процедуру

_____________
матфак вгу и остальная классика =)

исправил

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's picture

не смешивать в процедуре решение конкретной задачи и работу с интерфейсом (в целом - "побочный эффект").

_____________
матфак вгу и остальная классика =)

vedro-compota's picture

пусть filling_empty_strings() сразу возвращает готовый результат.

_____________
матфак вгу и остальная классика =)

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's picture

procedure filling_empty_strings(s:string; var empty_str,empty_int:string ; var empty_ball :integer);

-- достаточно 3 переменных на вход, зачем 4-ре?

_____________
матфак вгу и остальная классика =)

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's picture

убрать побочный эффект из процедуры.

_____________
матфак вгу и остальная классика =)