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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.05.2009, 19:59   #1
RomT24
Пользователь
 
Регистрация: 10.01.2009
Сообщений: 71
Восклицание Простая с виду задача, но..

Доброго времени суток!
Есть такая задача:
"Дан массив (или строка - здесь разница несущественна) чисел. Если 2 соседних числа четны, то вставить между ними "1", если нечетны - "-1"". Вопрос - какими методами ее можно решить. Возможны ли следующие способы:
1) Если числа в виде массива, то сформировать новый со вставленными элементами. Я так и пытался сделать:
Код:
 var
  s,s1:array [1..100] of integer;
  i,j,k,l,n,i1,j1,d:integer;
 begin
  writeln('Введите кол-во вводимых чисел: ');
  read(n);
  writeln('Введите сами числа: ');
  for i1:=1 to n do
  read(s[i1]);
  d:=1;
  k:=0;
  for i:=1 to n do
   begin
    if (s[i] mod 2 = 0) and (s[i+1] mod 2 = 0) then
     begin
      k:=k+1;
      s1[d]:=s[i];
      s1[d+1]:=1;
      s1[d+2]:=s[i+1];
     d:=d+3;
     end
    else
    if (s[i] mod 2 <> 0) and (s[i+1] mod 2 <> 0) then
     begin
      k:=k+1;
      s1[d]:=s[i];
      s1[d+1]:=-1;
      s1[d+2]:=s[i+1];
     d:=d+3;
     end;
   end;
  for j1:=1 to (n+k) do
  write(s1[j1],' ');
 end.
Но здесь есть недостаток - если например дан массив 4444, то будет выведено 414414414, то есть у меня он складывает массив в цикле по принципу '1 эл-т+1(-1)+2 эл-т'.
2) Использовать динамический массив. Я работаю в среде PascalABC и там он не хочет использовать динамические массивы. Но если этот вариант возможен, подскажите каким способом..
3) Использовать строки. Но с процедурой Insert у меня ничего не работает, а складывание в цикле похоже то же самое , что и в первом варианте...
Вот так вот длинно и нудно я все вам представил.. У кого хватило терпения дочитать - всегда рад любым советам!
RomT24 вне форума Ответить с цитированием
Старый 11.05.2009, 23:55   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от RomT24
Дан массив (или строка - здесь разница несущественна)
имхо, Вы неправы! разница ОЧЕНЬ существенна!
с массивом НАМНОГО сложнее: там же элементы надо "сдвигать" (переписывать последний на место последний+1, предпоследний на место последнего и т.д. до нужной позиции).
а для строки программа полностью будет выглядеть так:
Код:
var
  i:integer;
  One1, One2, iError : integer;
  s:string;
begin
  s := '44445744';
  i := 1;
  while i<length(s) do
  begin
    val(s[i],One1,iError);
    val(s[i+1],One2,iError);
    if (not odd(One1)) and (not odd(One2)) then begin
      Insert('1',s,i+1);
      Inc(i);
    end;
    if odd(One1) and odd(One2) then begin
      Insert('-1',s,i+1);
      Inc(i,2);
    end;
    inc(i);
  end;
  WriteLn(s);
  
end.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Простая задача. Delphi. svobodys Помощь студентам 3 02.03.2009 08:35
Не простая задача !!! MaxZoa Microsoft Office Excel 2 06.03.2008 18:07
Простая задача еще utyyf Помощь студентам 28 23.10.2007 00:07
Простая задача utyyf Помощь студентам 25 18.10.2007 14:50