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

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

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

 
 Ответить  Открыть новую тему 
> Разбиение строки на числа
-Денис-
сообщение 5.04.2006 14:02
Сообщение #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?
Заранее огромное спасибо.
 К началу страницы 
+ Ответить 
volvo
сообщение 5.04.2006 15:37
Сообщение #2


Гость






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

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


Гость






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

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

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

Короче, фишка такая: я пишу прогу, но никак не могу придумать структуру, при которой я мог бы вводить вектор в виде строки целочисленных элементов через запятую, а после загонять это в вектор типа интежер, и в случае неправильно ввода возвращать пользователя на введение строки заного.
 К началу страницы 
+ Ответить 
volvo
сообщение 5.04.2006 17:25
Сообщение #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

 



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