Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.11.2012, 17:37   #11
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Надо было уточнять это в ИСХОДНОМ задании
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 13.11.2012, 17:41   #12
NinaSSS
Пользователь
 
Регистрация: 30.10.2012
Сообщений: 34
По умолчанию

если обрубить конец(т.е выдавать только чередующиеся, то попробуйте так)
Код:
  ... writeln('massiv rezul');
                       if k<=x then begin
    for i:=1 to 2*k do begin
    if d[i]<> 0 then
    write (d[i]:3);end end else
      if k>x then begin
    for i:=1 to 2*x do begin
    if d[i]<> 0 then
    write (d[i]:3);end end else
    end.
NinaSSS вне форума Ответить с цитированием
Старый 13.11.2012, 17:44   #13
Freedo
Пользователь
 
Регистрация: 16.10.2012
Сообщений: 27
По умолчанию

В исходном задании я указал всё что было задано.

То есть Вы считаете, что тот результат который получается удовлетворяет условиям задачи?

Просто мне этот результат кажется странным.
Freedo вне форума Ответить с цитированием
Старый 13.11.2012, 17:53   #14
Freedo
Пользователь
 
Регистрация: 16.10.2012
Сообщений: 27
По умолчанию

NinaSSS, спасибо огромное, Вы мне очень помогли.
Freedo вне форума Ответить с цитированием
Старый 13.11.2012, 20:02   #15
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Не пойму, че вы все парились, я ж сразу сказал: расписать матрицу в вектор, отсортировать да переставить как надо. Вот, за 10 минут написал:

Код:
const n=10;

type matrix=array [1..n,1..n] of integer;
     vector=array [1..n*n] of integer;

var  in_m: matrix;
     tmp_m, out_m: vector;
     fp: integer;

procedure CreateMatrix;
var i,j:integer;
begin
  randomize;
  for i:=1 to n do
    for j:=1 to n do
      in_m[i,j]:=random(19)-9;
end;

procedure WriteMatrix;
var i,j:integer;
begin
  for i:=1 to n do begin
    for j:=1 to n do
      Write(in_m[i,j],'   ');
    WriteLn;
  end;
end;

procedure CreateVector;
var i,j,k:integer;
begin
  k:=1;
  for i:=1 to n do
    for j:=1 to n do begin
      tmp_m[k]:=in_m[i,j];
      inc(k);
    end;
end;

function SortVector: integer;
var i,j,temp: integer;
begin
  for i:=1 to n*n-1 do
    for j:=1 to n*n-i do
      if tmp_m[j]>tmp_m[j+1] then begin
        tmp_m[j]:=tmp_m[j]+tmp_m[j+1];
        tmp_m[j+1]:=tmp_m[j]-tmp_m[j+1];
        tmp_m[j]:=tmp_m[j]-tmp_m[j+1];
        if (tmp_m[j+1]>=0) and (tmp_m[j]<0) then temp:=j+1;
      end;
  SortVector:=temp;
end;

procedure CreateOutVector(first_plus: integer);
var i,j,k: integer;
begin
  i:=1;
  j:=first_plus;
  k:=1;
  While (i<first_plus) and (j<=n*n) do begin
    out_m[k]:=tmp_m[j];
    inc(k);
    out_m[k]:=tmp_m[i];
    inc(k);
    inc(i);
    inc(j);
  end;
  While i<first_plus do begin
    out_m[k]:=tmp_m[i];
    inc(k);
    inc(i);
  end;
  While j<=n*n do begin
    out_m[k]:=tmp_m[j];
    inc(k);
    inc(j);
  end;
end;

procedure WriteVector(v:Vector);
var i: integer;
begin
  For i:=1 to n*n do Write(v[i],'   ');
end;

begin
  CreateMatrix;
  WriteLn('Исходная матрица: ');
  WriteMatrix;
  ReadLn;
  WriteLn(' ');
  CreateVector;
  WriteLn('Временный вектор: ');
  WriteVector(tmp_m);
  ReadLn;
  WriteLn(' ');
  fp:=SortVector;
  WriteLn('Отсортированный по возрастанию временный вектор: ');
  WriteVector(tmp_m);
  ReadLn;
  WriteLn(' ');
  CreateOutVector(fp);
  WriteLn('Результирующий вектор: ');
  WriteVector(out_m);
  ReadLn;
end.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 13.11.2012, 20:36   #16
Freedo
Пользователь
 
Регистрация: 16.10.2012
Сообщений: 27
По умолчанию

Sciv, спасибо, то что нужно.
Freedo вне форума Ответить с цитированием
Старый 15.11.2012, 21:25   #17
Freedo
Пользователь
 
Регистрация: 16.10.2012
Сообщений: 27
По умолчанию

Не мог бы кто-нибудь объяснить вот этот момент.

Код:
if i mod 2 =0 then begin d[i]:=b[i div 2 ]; end;
if odd(i) then  begin d[i]:=c[i div 2+1 ]; end; end;
Понятно, что если чётное то d[i]:=b[i div 2 ], а если нечётное то d[i]:=c[i div 2+1 ], но вот как точнее это высказать, почему div 2 и div 2+1?


d - массив с чередующимися сиволами.
b - массив с положительными числами.
c - массив с отрицательными числами.

Всё ненадо, сам разобрался, нужно было всего лишь правильно поставить вопрос.

Последний раз редактировалось Freedo; 15.11.2012 в 21:38.
Freedo вне форума Ответить с цитированием
Старый 15.11.2012, 21:40   #18
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

хех... я уже отвечать начал, потом дочитал...
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сформировать одномерный массив, элементами которого являются все положительные элементы исходного массива... sev48fire Помощь студентам 11 07.06.2012 11:06
С генерировать одновременно как отрицательные так и положительные числа в массиве. Leshii Паскаль, Turbo Pascal, PascalABC.NET 0 13.11.2011 22:31
Задан вектор X[20]. Положительные числа переписать в массив Y, а отрицательные в массив W leha_demi Помощь студентам 2 24.09.2011 18:12
Все отрицательные элементы массива А заменить на сумму, а положительные на полусумму предшествующих Lada05 Помощь студентам 1 27.10.2010 15:44
Сформировать новый массив,содержащий отрицательные элементы - Задача по PASCAl. Waia Помощь студентам 2 17.12.2008 18:27