На главную
ПРАВИЛА 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,0646 ]   [ 14 queries used ]   [ Generated: 18.07.19, 11:06 GMT ]