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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.08.2011, 13:43   #1
stas45rus
Пользователь
 
Регистрация: 26.08.2011
Сообщений: 46
По умолчанию Сдвиг массива вправо на 1 элемент

Всем привет!!!
Дан код:
Код:
Program SA;
Uses Crt;
Var b:array[1..255] of integer;
    i,k,s,c,n,m,ed,des,ost:integer;
Begin
 ClrScr;
  for i:=65 to 90 do
   begin
   write(chr(i),'-');
   des:=i-65;
   n:=0;
   ed:=0;
   while des>0 do
    begin
      n:=n+1;
      ost:=des mod 2;
       if ost=1 then ed:=ed+1;
      b[n]:=ost;
      des:=des div 2;
    end;
   if odd(ed) then b[6]:=1 else b[6]:=0;
{Вот здесь начинается циклический сдвиг вправо на 1 элемент, но он}
{Почему-то работает не для всех чисел}
   for k:=1 to 1 do
    begin
      for m:=6 downto 2 do
       if (m=6) then c:=b[6] else b[m+1]:=b[m];
    end;
   for s:=6 downto 1 do
    write(b[s]);
    write(' ',' ');
   end;
 readln;
End.
Подскажите пжл в чём ошибка.




___________
я видел, что Вы пытались оформить код тегами, как и положено по правилам.
Только забыли выделить текст программы перед нажатием кнопочки с решёточкой #
Или вставили текст программы не между тегами..

В следущий раз будьте, пожалуйста, внимательнее!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 30.08.2011 в 14:12.
stas45rus вне форума Ответить с цитированием
Старый 30.08.2011, 13:46   #2
rrrFer
Санитар
Старожил
 
Аватар для rrrFer
 
Регистрация: 04.10.2008
Сообщений: 2,577
По умолчанию

паскаль я забыл, но
Код:
for k:=1 to 1 do
меня удивляет еще и тем, что я не вижу чтобы "k" вообще использовалось
rrrFer вне форума Ответить с цитированием
Старый 30.08.2011, 14:20   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Простите, я лично не могу понять, что за ужас реализован в Вашем коде...

но, циклический сдвиг (вправо, например) легко выполняется следующим образом:
во временную переменную запоминаем крайний элемент массива (пусть это будет N-й элемент)
в цикле по k от N-1 до 1 с шагом -1 на место k+1 переписываем k-й элемент.
т.е. на место N-го - ставим (N-1)-й элемент, на место (N-1)-го ставим (N-2) и т.д.
после окончания цикла сохранённый последний элемент ставим на место 1-го элемента.

в коде на Pascal это будет выглядеть так:
Код:
  {код циклического сдвига вправо на 1 элемент массива B, состоящего из n элементов}
  TempB := b[n];
  for k:=n-1 downto 1 do
     b[k+1]  := b[k];
  b[1] := TempB; 
  {--- сдвиг выполнен ----}
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сдвиг массива вправо tem_80 Общие вопросы C/C++ 5 01.02.2011 15:21
">>" :( сдвиг вправо Teksa Общие вопросы C/C++ 2 20.07.2010 10:40
Сдвиг массива. Джед Общие вопросы C/C++ 19 10.06.2009 16:44
циклический сдвиг массива goacher Общие вопросы C/C++ 4 28.05.2008 20:11
циклический сдвиг массива goacher Паскаль, Turbo Pascal, PascalABC.NET 4 27.05.2008 22:26