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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 22:11   #11
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

а я, вот, буквально сегодня делал:
Удалить из массива все элементы, кратные 3 или 5. Остальные элементы сдвинуть влево.
Код:
int main (void)
{
  int mas[30];//Массив
  int *p,*r=&mas[30];//p-указатель массива, r-указатель на конец массива
  int *s,*d;//указатели, используемые при удалении элементов s(source)-указатель на текущий читаемый элемент
  //d(destination) -указатель на текущий записываемый элемент
  randomize();//инициализацтя генератора случайных чисел
  clrscr();	//очистка экрана
  puts("Список:");//вывести заголовок
  for(p=mas;p<r;p++)//цикл по массиву через указатели
  {
    *p=rand()%100-50;//инициализация элемента массива случайным числом от -50 до 50
    printf("%d ",*p);//вывод значения массива
  }
  //Удаление элементов
  for(s=d=mas;s<r;s++)//читаем все элементы массива
  {
    if((*s%3!=0)&&(*s%5!=0))//и если элемент не кратен 3 и не кратен 5
    {
      *d=*s;	//то сохраняем этот элемент
      d++;	//увеличение указателя destination
    }
  }
  printf("\nСписок без элементов, кратных 3 и 5:\n");//вывести заголовок
  for(p=mas;p<d;p++) printf("%d ",*p);//вывод в цикле измененного массива, при этом d теперь указывает на новый конец массива

//заполнение остатка нулями
for(p<r;p++) *p=0;

  getch();//ожидание нажатия любой клавиши
  return 0;
}
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 25.06.2010, 00:08   #12
Vladimir-888
Пользователь
 
Регистрация: 01.04.2010
Сообщений: 29
По умолчанию

Цитата:
хм, а чем Вам код Stilet из поста #4 не подходит?
я пробовал этот код, но это не то что мне надо
Vladimir-888 вне форума Ответить с цитированием
Старый 27.06.2010, 17:50   #13
Vladimir-888
Пользователь
 
Регистрация: 01.04.2010
Сообщений: 29
По умолчанию

Цитата:
а я, вот, буквально сегодня делал:
Удалить из массива все элементы, кратные 3 или 5. Остальные элементы сдвинуть влево.
Код:
int main (void)
{
  int mas[30];//Массив
  int *p,*r=&mas[30];//p-указатель массива, r-указатель на конец массива
  int *s,*d;//указатели, используемые при удалении элементов s(source)-указатель на текущий читаемый элемент
  //d(destination) -указатель на текущий записываемый элемент
  randomize();//инициализацтя генератора случайных чисел
  clrscr();	//очистка экрана
  puts("Список:");//вывести заголовок
  for(p=mas;p<r;p++)//цикл по массиву через указатели
  {
    *p=rand()%100-50;//инициализация элемента массива случайным числом от -50 до 50
    printf("%d ",*p);//вывод значения массива
  }
  //Удаление элементов
  for(s=d=mas;s<r;s++)//читаем все элементы массива
  {
    if((*s%3!=0)&&(*s%5!=0))//и если элемент не кратен 3 и не кратен 5
    {
      *d=*s;	//то сохраняем этот элемент
      d++;	//увеличение указателя destination
    }
  }
  printf("\nСписок без элементов, кратных 3 и 5:\n");//вывести заголовок
  for(p=mas;p<d;p++) printf("%d ",*p);//вывод в цикле измененного массива, при этом d теперь указывает на новый конец массива

//заполнение остатка нулями
for(p<r;p++) *p=0;

  getch();//ожидание нажатия любой клавиши
  return 0;
}
А на Delphi можно, только не используя указатели
Vladimir-888 вне форума Ответить с цитированием
Старый 27.06.2010, 21:25   #14
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Извините, Delphi не знаю , а мой любимый язык в подписи
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 27.06.2010, 22:08   #15
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

я бы отходил от концепции "сначала создали массив, вывели его, и вот он готов"
а потом уже проводили с ним операции удаления, когда он уже сформирован полностью
я, конечно, понимаю, что по мере создания массива все намного легче и проще, безусловно, алгоритм #4 имеет право на жизнь, но он какой-то "нереалистичный"
большинство задач сводится к "имеется такая-то структура данных, с ней сделать вот это", поэтому мне не очень нравится этот алгоритм для конкретной задачи
чисто по сабжу сделал бы через связный список
и если надо вывел бы в обычный массив
capta1n вне форума Ответить с цитированием
Старый 28.06.2010, 01:24   #16
Vladimir-888
Пользователь
 
Регистрация: 01.04.2010
Сообщений: 29
По умолчанию

ну и как это всё провернуть?
Vladimir-888 вне форума Ответить с цитированием
Старый 28.06.2010, 01:33   #17
Vladimir-888
Пользователь
 
Регистрация: 01.04.2010
Сообщений: 29
По умолчанию

помогите, вот что сделал, немного бред, но где-то рядом)
Код:
//сжатие массива
procedure TForm1.RadioButton3Click(Sender: TObject);
var
 i,j,a,b,m,n,x,y:integer;
begin
a:=StrToInt(Edit3.Text);
b:=StrToInt(Edit4.Text);
m:=StringGrid1.RowCount-1;//кол-во строк
n:=StringGrid1.ColCount-1;//кол-во столбцов
for i:=1 to m do
 begin
  for j:=1 to n do
   begin
    if (a<=abs(massiv[i,j])) and (abs(massiv[i,j])<=b) then
     begin
      for x:=i to m do
       begin
        for y:=j to n do
         begin
          if y<n then
            begin
              StringGrid1.Cells[y,x]:=StringGrid1.Cells[y+1,x];
              massiv[x,y]:=StrToInt(StringGrid1.Cells[y,x]);
              StringGrid1.Cells[n,m]:=IntToStr(0);
              massiv[m,n]:=StrToInt(StringGrid1.Cells[n,m]);
            end
          else
            begin
              StringGrid1.Cells[y,x]:=StringGrid1.Cells[1,x+1];
              massiv[x,y]:=StrToInt(StringGrid1.Cells[y,x]);
              StringGrid1.Cells[n,m]:=IntToStr(0);
              massiv[m,n]:=StrToInt(StringGrid1.Cells[n,m]);
            end;
         end;
       end;      
     end;
   end;
 end;
end;
Vladimir-888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сжать bmp? MkG Общие вопросы C/C++ 2 23.05.2010 12:10
Как сжать и распаковать файл с помощью API? 3D Hunter Win Api 10 16.03.2010 03:05
программа 160 м.б весит ее нужно сжать до 50. WinRar так не сжимет Alex2009 Свободное общение 9 30.11.2009 15:46
Упорядочить массив в порядке возрастания и напечатать входной и исходный массив. TheVenny Помощь студентам 3 26.11.2008 15:06
сжать файл andrey4623 Общие вопросы Delphi 14 13.01.2008 07:31