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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2011, 14:01   #1
pobejali
Новичок
Джуниор
 
Регистрация: 05.10.2011
Сообщений: 1
По умолчанию выборка из массивов

делит зззз

Последний раз редактировалось pobejali; 05.10.2011 в 15:15.
pobejali вне форума Ответить с цитированием
Старый 05.10.2011, 15:17   #2
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

Примерно так (не проверял. т.к. нет компилятора подрукой. такчто могуть быть ошибки)

Код:
#include<stdio.h>
#include<stdlib.h>
int main()
{
  int a[10],b[10],c[20],na,nb,nc=0,i,j,k;
  printf("введите длину массива А:");
  scanf("%d",&na);
  printf("введите массив A\n");
  for(i=0;i<na;i++)
   scanf("%d",&a[i]);
   printf("введите длину массива B:");
  scanf("%d",&nb);
  printf("введите массив B\n");
  for(i=0;i<nb;i++)
   scanf("%d",&b[i]);


//  ....
//  ....
//  здесь нужно отсортировать массивы a и b по возрастанию. попробуйте сделать это сами либо для начала
//  водите исходные данные в возрастающем поряждке.
//  ....
//  ....



  int posa = 0;
  int posb = 0;
  while ((posa<na)||(posb<nb))
  {

    // Находим количество подряд идущих одинаковых элементов в каждом массива
    int countsameA = 0;
    while ((posa+countsameA<na)&&(a[posa]==a[posa+countsameA]))
      countsameA++;
    int countsameB = 0;
    while ((posb+countsameB<nb)&&(b[posb]==b[posB+countsameB]))
      countsameB++;
    if ((countsameA>0)&&(countsameB>0))  // Если оба массива в обоих массивай ещё есть элементы для анализа
    {
      if (a[posa]==b[posb]) // Проверяем случай если в обоих массивах одинаковые элементы
      {
        // Сдвигаем указатель обработанных элементов. Но ничего незаписываем в массив с
        posa += countsameA;
        posb += countsameB;
        
      }
      else
      {
        // Если элементы в массивах неравны. То выбираем меньший и записываем его в массив c
        if (a[posa]<b[posb])
        {
          c[nc] = a[posa];
          posa += countsameA; 
        }
        else
        {
          c[nc] = b[posb]
          posb += countsameB;
        }
        nc++;
      }
    } else
    {
      // Если один из массивов уже обработан полностью. То берём оставшиеся данные из другово и помещаем в массив c
      if (countsameA>0)
      {
        c[nc] = a[posa];
        posa += countsameA;   
      }
      else 
      {
        c[nc] = b[posb];
        posb += countsameB;   
      }
      nc++;
    }
  }

  printf("результирующий массив c\n");
  for(i=0;i<nc;i++)
   printf("%d",c[i]);
}

только незабудте что ещё нужно дбавить сортировку массивов. (поищите на форуме, должно быть куча примеров как отсортировать массивы) ну или для начала просто вводить массивы в возврастающем (отсортированном) виде.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi, сравнение массивов, умножение массивов Marjasja Помощь студентам 0 22.05.2011 19:59
Delphi, сравнение массивов, умножение массивов Marjasja Общие вопросы Delphi 0 22.05.2011 19:49
Выборка выборка с таблицы с отношением многие-ко-многим 8alig8 БД в Delphi 2 24.06.2010 12:21
Выборка массивов! Sasuke-sama Общие вопросы C/C++ 10 30.05.2009 16:44
выборка из БД xvipx Microsoft Office Excel 13 30.01.2009 12:43