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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 21:17   #1
XemyL
Пользователь
 
Регистрация: 24.04.2011
Сообщений: 30
По умолчанию Общие елементы двох массивов, Си

не вижу в чем проблема..
задание: два массива (без повторов елементов), нужно вывести их общие елементы (ну и сортировка).
Сначало сортирую каждый массив вставками, потом делаю проверку на общие елементы, но во время хода сортировки или создания третего массива что то идет не так, - 0 и отрицательные числа выводятся как беззнаковые или же идет зависание. Где ошибка?

Код:
#include <stdio.h> 

 void InsSort( int arr[], int len ); 

 int main (void) 
 { 
    int arr1[10], tmp; 
    int arr2[10]; 
    int arr3[10]; 
     
    int MAX, end1, end2; 
    int j, i, k,l, flag, *p1, *p2, e1, e2; 

 //Inputing First Array 
    printf ("Enter number of elements of first set: "); 
       scanf("%d", &end1); 

    printf ("Enter elements of first set (%d things):\n", end1); 
    for (i=0; i<end1; i++) 
                  scanf("%d", (arr1+i)); 

 //Inputing Second Array 
    printf ("Enter number of elements of second set: "); 
       scanf("%d", &end2); 
     
    printf ("Enter elements of second set (%d things):\n", end2); 
    for (i=0; i<end2; i++) 
         scanf("%d", (arr2+i)); 
          
 //Sort 
     
    InsSort(arr1,end1); 
    InsSort(arr2,end2); 

 //Unite of sets (arrays) 1 & 2 

    k=0; 
     
    if (end1<=end2) 
    { 
       for (i=0, j=0; i<end1; ) 
       { 
          if (arr1[i]==arr2[j]) 
          { 
             arr3[k]=arr1[i]; 
             j++; i++; k++; 
          } 
          else 
             if (arr1[j]>arr2[i]) 
                i++; 
          else 
             if (arr1[j]<arr2[i]) 
                j++; 
       } 
    } 
    else if (end1>end2) 
    { 
       for (i=0, j=0; i<end2; ) 
       { 
          if (arr2[i]==arr1[j]) 
          { 
             arr3[k]=arr2[i]; 
              j++; i++; k++; 
          } 
          else 
             if (arr2[j]>arr1[i]) 
                i++; 
          else 
             if (arr2[j]<arr1[i]) 
                j++; 
       } 
    } 
     
 //Test Output 
     
    puts("\n\n\n1st:"); 
    for (i=0; i<end1; i++) 
       printf("%d ",*(arr1+i)); 

    puts("\n2nd:"); 
    for (i=0; i<end2; i++) 
       printf("%d ",*(arr2+i)); 
        
    puts("\n3rd:"); 
    for (i=0; i<k; i++) 
       printf("%d ",*(arr3+i)); 


    getchar(); 
    getchar(); 
    return 0;    
 } 


 void InsSort( int arr[], int len ) 
 { 
    int i, j, tmp; 
    for(i=1; i<len; i++) 
    { 
       tmp = arr[i]; 
       j = i-1; 
       while ( tmp < arr[j] ) 
       { 
          arr[j+1] = arr[j]; 
          j--; 
       } 
       arr[j+1] = tmp; 
    } 
 }
XemyL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка в двох проверках sasha14486 PHP 0 02.11.2009 00:31
в ф-ии копирование зануливает елементы... Natok Помощь студентам 15 30.05.2009 01:22
Перенести общие елементы двух массивов в другой. leshax Общие вопросы C/C++ 1 04.02.2009 20:57
Администрирование\управление компьютером\Общие папки\Общие ресурсы\прекратить общий доступ lm_strj Безопасность, Шифрование 2 13.10.2007 21:28