Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Разбиение строки на числа

Автор: -Денис- 5.04.2006 18:02

Привет. Помогите мне, пожалуйста, дописать прогу, а то чет никак. Короче тема следующая:

Код

uses crt, system;    
const nv=3;    
type
  tmas=array[1..1] of integer;        
  
  tmatrix=array[1..nv] of
      record  
        str:string;  
                     qty:integer;                      
                     mas:^tmas;                      
    end;                              
var
  indicator:byte;
  matrix:tmatrix;

{Write Reference}
Procedure Commands;
Begin
  Writeln('Choose command:');
  Writeln('1 - Select array');
  Writeln('2 - Input array');
  Writeln('3 - Output array');
  Writeln('4 - Sorting array');
  Writeln('5 - Array processing');
  Writeln('6 - Exit');
End;

{Select array}
procedure Select_array;                  
var a:byte;
begin
  writeln('Enter number of desired array from 1 to 3');
  readln(a);                      
  if (a>=1)and(a<=3)
   then
    indicator:=a  
   else
        writeln('Not available number');
end;

{Input array}
procedure Input_array;
var i,n,k:byte;
        s:string;
begin
  Writeln('Input array in string across comma');
  readln(s);
  k:=1;
  for i:=1 to length(s) do
    if (s[i]<>'') and (s[i]<>',') and (s[i] not in [a..z])
        then
            matrix[indicator].str[k]:=matrix[indicator].str[k]+s[i]
        else
            inc(k);
  getmem(matrix[indicator].mas,k*2);
  for i:=1 to k do
      val(matrix[indicator].str[i],matrix[indicator].mas);
  matrix[index].qty:=k;    
end;
....

Но вот в последней процедуре возникли вопросы: правильно ли я запихнул строку, содержащую целочисленные элементы, введеные через запятую, в вектор? Как отправить юзера на повторный ввод, если code=1?
Заранее огромное спасибо.

Автор: volvo 5.04.2006 19:37

-Денис-
Давай ты приведешь полное задание? А то совершенно непонятно, зачем ты определяешь все эти структуры (например, tmatrix), и как ты хотел это использовать...

Твой фрагмент кода просто не компилируется...

Автор: -Денис- 5.04.2006 20:19

Цитата(volvo @ 5.04.2006 15:37) *

-Денис-
Давай ты приведешь полное задание? А то совершенно непонятно, зачем ты определяешь все эти структуры (например, tmatrix), и как ты хотел это использовать...

Твой фрагмент кода просто не компилируется...

Короче, фишка такая: я пишу прогу, но никак не могу придумать структуру, при которой я мог бы вводить вектор в виде строки целочисленных элементов через запятую, а после загонять это в вектор типа интежер, и в случае неправильно ввода возвращать пользователя на введение строки заного.

Автор: volvo 5.04.2006 21:25

Цитата(-Денис- @ 5.04.2006 16:19)
никак не могу придумать структуру, при которой я мог бы вводить вектор в виде строки целочисленных элементов через запятую, а после загонять это в вектор типа интежер, и в случае неправильно ввода возвращать пользователя на введение строки заного.

Ты про это:
type { Это для простоты... Можешь сделать динамический массив }
arrType = array[1 .. 20] of integer;

function get_vector(s: string; var arr: arrType): integer;
var
st: string;
p, len, curr, X, err: integer;

begin
get_vector := -1;

if (s = '') or (s[1] = ',') or (s[length(s)] = ',') then exit
else
for p := 1 to length(s) do
if not (s[p] in ['0' .. '9', '-', ',']) then exit;

curr := 0;
repeat

p := pos(',', s);
if p = 0 then len := length(s)
else len := p - 1;

st := copy(s, 1, len);
inc(curr);
val(st, X, err);
if err <> 0 then exit;
arr[curr] := X;

delete(s, 1, succ(len));

until length(s) = 0;
get_vector := curr

end;

var
s: string;
arr: arrType;
i, len: integer;

begin
repeat
writeln('enter string: ');
readln(s);
len := get_vector(s, arr);
until len > 0;

for i := 1 to len do
write(arr[i]:5);
writeln;
end.
?

(можно вводить и отрицательные числа тоже)