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

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

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

 
 Ответить  Открыть новую тему 
> Формирование массива - чередование, Формируем один из двух специальным чередованием
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Добрый вечер или как smile.gif
Вообщем у меня такое задание.
Пользователь задает 2 массива, причем количество индексов может быть различным, например у массива B - 10 а у массива C - 7.
Итак, и из этих 2 массивов требуется сформировать один - A.
Причем следующим образом:
первые два элемента берем из массива C, вторые 2 из массива B, третьи 2 из массива C и так далее,
по чередованию.
Если один из массивов заканчивается,
то другой прибиваем вниз главного.
Вот, что у меня получилось:
Код

program massive_2_6;
CONST
     start=1;
     end1=5;
     end2=5;
     mainend=end1+end2;
var
   b: ARRAY [start..end1] OF INTEGER;
   c: ARRAY [start..end2] OF INTEGER;
   a: ARRAY [start..mainend] OF INTEGER;
   i, yesb, yesc, cntb, cntc: byte;
   context: INTEGER;

begin
writeln('‚ўҐ¤ЁвҐ ', end1, ' §­ зҐ­Ё© ЇҐаў®Ј® ¬ ббЁў : ');

  for i:=start to end1 DO
    begin
      readln(context);
      b[i]:=context;
    end;
writeln;
writeln('‚ўҐ¤ЁвҐ ', end2, ' §­ зҐ­Ё© ўв®а®Ј® ¬ ббЁў : ');

  for i:=start to end2 DO
    begin
      readln(context);
      c[i]:=context;
    end;

  yesc:=1;
  yesb:=0;
  cntb:=1;
  cntc:=1;

  for i:=start to mainend DO
    begin
      if (yesc<>0) then
        begin
          if (yesc<3) then
            begin
              a[i]:=c[cntc];
              cntc:=cntc+1;
              yesc:=yesc+1;
            end
          else
            begin
             yesc:=0;
             yesb:=1;
            end;
      if (yesb<>0) then
        begin
          if (yesb<3) then
            begin
              a[i]:=b[cntb];
              cntb:=cntb+1;
              yesb:=yesb+1;
            end
          else
            begin
              yesc:=1;
              yesb:=0;
            end;
        end;
        end;

    end;

  for i:=start to mainend DO
    begin
    write(a[i], ' ');
    end;
readln;
end.

Понимаю, код большой и никто разбираться в нем не хочет.
Но хотел спросить - у меня правильно идут только первые 3 элемента нового массива A,
т.е. они формируются правилно, а остальные - все нули, к сожалению.
Может, кто подскажет другую технологию, более совершенную?
Спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата(Домовой @ 3.04.2006 20:23)
Может, кто подскажет другую технологию


Может быть smile.gif
...
curr_b := 1; curr_c := 1;
i := 1;
while (curr_c <= end2) and (curr_b <= end1) do begin

for j := 1 to 2 do
if curr_c <= end2 then begin
a[i] := c[curr_c]; inc(i); inc(curr_c);
end;
for j := 1 to 2 do
if curr_b <= end1 then begin
a[i] := b[curr_b]; inc(i); inc(curr_b);
end;

end;

while curr_c <= end2 do begin
a[i] := c[curr_c]; inc(i); inc(curr_c);
end;
while curr_b <= end1 do begin
a[i] := b[curr_b]; inc(i); inc(curr_b);
end;
...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 23
Пол: Мужской

Репутация: -  0  +


Ага, спасибо.
Я тоже нашел альтернативу:
Код

  for i:=start to mainend DO
    begin
      if startc=1 then
        begin
          a[i]:=c[posc];
          cnt:=cnt+1;
          posc:=posc+1;
            if cnt>=2 then
              begin
                cnt:=0;
                startc:=0;
                startb:=1;
              end;
        end
      else if startb=1 then
        begin
          a[i]:=b[posb];
          cnt:=cnt+1;
          posb:=posb+1;
            if cnt>=2 then
              begin
                cnt:=0;
                startc:=1;
                startb:=0;
              end;
        end;

    end;

Что радует, это работает,
но, к сожалению, только тогда - когда оба массива по индексам одинаковы и четны,
например 4 и 4, 8 и 8, 10 и 10...
Хотел српосить - как возможно поставить проверку.
Ну например,
если первый массив - 10 а второй 7 индексов содержит,
то как к концу общего массива просто преписать оставшиеся 3 из первого?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 28.03.2024 23:21
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name