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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 23:06   #1
Staffikk
 
Регистрация: 27.05.2009
Сообщений: 3
Восклицание Люди добрые помогите плз с задачкой по турбо паскалю

Дан одномерный массив содержащий большое число нулевых элементов, нужно заменить каждую группу подряд идущих нулей на 1, и сжать массив.
Мыслей много но ни как не могу собрать цикл..и вообще не получается сжать массив.Помогите очень прошу
Staffikk вне форума Ответить с цитированием
Старый 28.05.2009, 10:16   #2
fbus
Форумчанин
 
Аватар для fbus
 
Регистрация: 23.10.2008
Сообщений: 460
По умолчанию

стучи в аську
fbus вне форума Ответить с цитированием
Старый 28.05.2009, 10:32   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Мыслей много
Делись мыслями )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2009, 07:57   #4
Staffikk
 
Регистрация: 27.05.2009
Сообщений: 3
По умолчанию

вот набрал, работает где то на 80%))))
помогите исправить ошибки

Код:
program z1;
var a,b:array[1..1000] of integer;
i,n,t,k:integer;
begin
     writeln('kol-vo elementov');
     readln(n);
     writeln('Vvedite  elementi massiva');
     for i:=1 to n do read(a[i]);
     for i:=1 to n do  begin
     if a[i]=0 then begin t:=t+1;
                    if t>2 then begin  a[i]:=1;t:=0;end;
                    end;  end;
                    k:=1;
     for i:=1 to n do begin    a[k]:=a[i];
                      if a[i]<>0 then k:=k+1;
                      end;
     for i:=1 to k do write(a[i],' ');
end.

Последний раз редактировалось Stilet; 29.05.2009 в 12:18.
Staffikk вне форума Ответить с цитированием
Старый 29.05.2009, 12:25   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Вот пример
Код:
var b,a:array[1..30] of byte;i,k:byte;
begin
 randomize;
 for i:=1 to 30 do begin
  a[i]:=random(3);
  write(a[i]:2);
 end;
 k:=1; i:=1; while i<=30 do begin
  while (a[i]=0)and(a[i+1]=0) do inc(i);
  b[k]:=a[i];
  inc(i); inc(k);
 end;
 writeln;
 for i:=1 to 30 do begin
  write(b[i]:2);
 end;
readln;
  { TODO -oUser -cConsole Main : Insert code here }
end.
Сожмет массив, только там про единицы сам подумаешь.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2009, 13:30   #6
RusArtm
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 22
По умолчанию

А что значит "зжать массив"?
Если бы речь шла о динамическом массиве... но в обеих примерах обычные массивы....
RusArtm вне форума Ответить с цитированием
Старый 29.05.2009, 15:55   #7
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Вот ссылка, там и посмотри
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 29.05.2009, 22:30   #8
Staffikk
 
Регистрация: 27.05.2009
Сообщений: 3
По умолчанию

я это уже давно видел на гугле,
кста вот так проще избавиться от нулей

Код:
k:=1;
     for i:=1 to n do begin    a[k]:=a[i];
                      if a[i]<>0 then k:=k+1;
                      end;
      for i:=1 to k do write(a[i],' ');

у меня проблема в основном не в поиске нулей а в замене нуля на единицу, почему то заменяет на единицу не первый элемент, а может третий заменить или второй или вообще не заменить, вот прошу помощи в доработке
вот повторяю еще раз код программки:

Код:
program z1;
var a,b:array[1..1000] of integer;
i,n,t,k:integer;
begin
     writeln('kol-vo elementov');
     readln(n);
     writeln('Vvedite  elementi massiva');
     for i:=1 to n do read(a[i]);
     for i:=1 to n do  begin
     if a[i]=0 then begin t:=t+1;
                    if t>2 then begin  a[i]:=1;t:=0;end;
                    end;  end;
                    k:=1;
     for i:=1 to n do begin    a[k]:=a[i];
                      if a[i]<>0 then k:=k+1;
                      end;
     for i:=1 to k do write(a[i],' ');
end.

Последний раз редактировалось Staffikk; 30.05.2009 в 20:47.
Staffikk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добрые люди помогите плз MerZavetZ Паскаль, Turbo Pascal, PascalABC.NET 2 18.12.2008 10:08
Люди добрые помогите!!!... Stas))) Помощь студентам 3 02.06.2007 20:07