IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Разбиение строки на числа
сообщение
Сообщение #1


Гость






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

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?
Заранее огромное спасибо.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






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

Твой фрагмент кода просто не компилируется...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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

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

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

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


Гость






Цитата(-Денис- @ 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.
?

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

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 24.05.2017 22:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"