На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Название темы должно быть информативным !
Прежде чем задать вопрос, воспользуйтесь Поиском. и проверьте в FAQ (ЧАВО) Паскаля
Чтобы получить вразумительный ответ, подробно опишите проблему: что надо сделать, что не получается и номер ошибки (если есть), которую выводит компилятор.
Для вставки кода ваших программ используйте, пожалуйста, кнопку СODE=pas или выпадающий список СODE для других языков (подсветка синтаксиса).
[!] Как правильно задавать вопросы | Руководство по языку B.Pascal 7 & Objects/LR | Borland Pascal. Руководство пользователя
Модераторы: volvo877
  
> Помогите заочнице-первочку с задачей :), Помогите заочнице-первочку с задачей :)
Надо написать функцию, которая обрабатывает несколько комплексных чисел. Я ее написала, когда комплексные числа передаются через двумерный массив. А надо через строку:

'(1;2) (-1;-2) (2;1) (-2;-1)'

Как эту строку преобразовать в двумерный массив?

[[1,2],[-1,-2],[2,1],[-2,-1]]

числа другие, это для примера

Писать надо на чистом паскале. tp7 в dosbox, freepascal

На Java и Python смогла. Даже на C strtok хотя падает по segfault.

А на паскале с delete,pos запуталась.

Помогите, пожалуйста :)

мне не надо готовое решение. мне нужна помощь)
Сообщение отредактировано: wovoceg -
по сути, так:
цикл от 1 до 4
{
находим открывающую скобку - strchr;
переводим строку со след. символа в число - atoi - x
ищем ';' - strchr
переводим строку со след. символа в число - atoi (мнимая часть) - y
пишем (x,y) в элемент массива
}
Если не обязательно следить за корректностью формата входной строки (она гарантировано корректная), то достаточно ограничиться проверкой на принадлежность символа к цифрам и по подобию схемы Горнера формировать очередное число.
ExpandedWrap disabled
    program test;
     
    const
      N = 100;
    type
      TComplex = record
        Re, Im: integer
      end;
      TArray = array [0..N - 1] of TComplex;
    const
      S: string = '(127;298) (-14;-28) (22;15) (-72;-91)';
     
      function GetNumber(const AStr: string; var AStartPos: integer;
      var ANumber: integer): boolean;
      var
        i: integer;
        R, Sign: integer;
      begin
        {пропускаем разделители}
        i := AStartPos;
        while i <= length(AStr) do
        begin
          if (AStr[i] in ['0'..'9', '-']) then
            break;
          Inc(i);
        end;
        {если цифры не встретились, то вернуть false}
        if i > length(AStr) then
        begin
          AStartPos := i;
          GetNumber := False;
          exit;
        end;
        {т.к. цифры встретились - получаем число}
        Sign := 0;
        if AStr[i] = '-' then
        begin
          Inc(i);
          Sign := -1;
        end;
        R := 0;
        while i <= length(AStr) do
        begin
          if not (AStr[i] in ['0'..'9']) then
            break;
          R := R * 10 + byte(AStr[i]) - byte('0');
          Inc(i);
        end;
        R := (R xor Sign) - Sign;
        AStartPos := i;
        ANumber := R;
        GetNumber := True;
      end;
     
    var
      StartPos: integer;
      Vector: TArray;
      Len: integer;
      i: integer;
    begin
      {ввод массива}
      Len := 0;
      StartPos := 1;
      repeat
        if not GetNumber(s, StartPos, Vector[Len].Re) then
          break;
        if not GetNumber(s, StartPos, Vector[Len].Im) then
          break;
        Inc(Len);
      until StartPos > length(s);
      {тестовая печать}
      writeln(s);
      writeln('Len=', Len);
      for i := 0 to Len - 1 do
        writeln(Vector[i].Re, ' ', Vector[i].Im);
    end.
1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
0 пользователей:


Рейтинг@Mail.ru
[ Script Execution time: 0,0718 ]   [ 19 queries used ]   [ Generated: 17.06.19, 00:53 GMT ]